문자 인코딩(character encoding)은 바이트를 사람이 읽을 수 있는 문자로 변환하는 규칙을 의미합니다. HTML 문서를 올바르게 검증하거나 브라우저에 표시하려면, 프로그램이 반드시 하나의 문자 인코딩을 선택해야 합니다. HTML5에서는 문자 인코딩을 지정할 수 있는 세 가지 방법을 제공합니다.
1. HTTP Content-Type 헤더
CGI 스크립트나 이와 유사한 서버 측 프로그램을 작성하는 경우, HTTP Content-Type 헤더를 사용하여 문자 인코딩을 직접 설정할 수 있습니다. 아래는 Perl 기반 CGI에서 UTF-8 인코딩을 지정하는 예시입니다.
print "Content-Type: text/html; charset=utf-8\r\n";
이 방식은 서버가 응답 헤더를 통해 인코딩 정보를 전달하기 때문에, HTML 문서 내부에 별도의 선언이 없어도 브라우저가 올바른 인코딩으로 문서를 해석할 수 있다는 장점이 있습니다.
2. <meta> 요소 사용
HTML5 문서 내에서 <meta> 요소의 charset 속성을 사용하여 인코딩을 선언할 수 있습니다. 단, 이 선언은 반드시 문서의 처음 512바이트 이내에 위치해야 합니다. 웹 페이지에서 가장 널리 사용되는 표준적인 방법입니다.
<meta charset="UTF-8">
일반적으로 <head> 요소의 맨 앞부분, 즉 <title>보다 먼저 배치하는 것이 좋습니다. 그래야 브라우저가 문서를 파싱하는 초기 단계에서 인코딩을 확정할 수 있기 때문입니다.
3. Unicode BOM(Byte Order Mark)
BOM(바이트 순서 표식)은 데이터 스트림의 시작 부분에 위치하는 U+FEFF 문자 코드입니다. 주로 인코딩 정보가 표시되지 않은 일반 텍스트 파일에서 해당 파일의 바이트 순서(byte order)와 인코딩 형식(encoding form)을 식별하는 시그니처 역할을 합니다.
다만 BOM은 파일마다 자동으로 추가되지 않으며, 편집기 설정에 따라 포함 여부가 달라질 수 있습니다. 불필요한 BOM은 일부 환경에서 렌더링 문제를 일으킬 수 있으므로, 웹 문서에서는 meta 태그를 통한 명시적 선언이 더 안전한 방법으로 권장됩니다.
어떤 방법을 사용해야 할까?
대부분의 경우 <meta charset="UTF-8"> 한 줄이면 충분합니다. UTF-8은 전 세계 모든 언어를 지원하며 HTML5의 기본 인코딩이기도 하므로, 특별한 이유가 없다면 UTF-8을 사용하는 것이 가장 좋습니다.