문자집합(character set)은 이름 그대로 문자의 집합이다. ASCII, ISO-8859-1, UCS(Unicode의 문자집합) 등이 문자집합이다. ASCII는 127개, ISO-8859-1는 191개, 가장 최신의 UCS(Unicode 6.2)는 110,182개 문자의 집합으로 정의된다. UCS에 포함되는 문자의 갯수는 Unicode의 버전이 올라가면서 점점 증가하고 있다. 각 문자들은 번호가 매겨진다.
컴퓨터로 이 문자집합을 다루기 위해서는, 각 집합에 속한 문자들을 특정 길이의 정수(코드값)로 표현할 수 있어야 한다. 한 문자집합의 문자들을 코드값 표현하는 방법은 한 가지가 아니다. 예를 들어 UCS의 경우 UTF-8, UTF-16, UTF-32 등으로 표현할 수 있다. 문자 하나를 UTF-8은 8~32 비트, UTF-16은 16*n
비트, UTF-32는 32비트 크기의 코드값으로 표현한다. (( 좀 더 엄격하게 표현하자면, 문자에 대응하는 unicode code point를 code unit sequence로 변환한다. )) 이러한 표현방식들을 문자 인코딩 형태(character encoding form)라고 부른다.
이 코드값들로 이루어진 텍스트 데이터를 디스크에 저장하거나 네트워크로 전송하려면 옥텟의 시퀀스로 변환해주어야 한다. UTF-8 같은 경우 아무것도 안 해주어도 되지만, UTF-16 같은 경우엔 엔디안 처리가 필요하다. 이러한 변환방법들을 문자 인코딩 구조(character encoding scheme)라고 부른다.
그러나 컴퓨터 산업에서는 이 개념들을 정확히 잘 구분해서 사용하고 있지 못하다. 예를 들어 MIME의 charset은 마치 문자집합의 줄임말처럼 보이지만 전혀 그렇지 않다. 책 HTTP: The Definitive Guide에 따르면, MIME의 charset은 문자 인코딩 구조(character encoding scheme)와 부호화된 문자 집합(coded character set, 앞에서 말한 문자집합을 좀 더 엄밀하게 정의한 개념)의 의미가 결합된 개념으로 쓰이고 있다. (( HTTP: The Definitive Guide, p377 “Charset Is Poorly Named” )) 따라서 us-ascii, iso-8859-1, utf-8 등이 모두 charset 속성의 값이 될 수 있다. MIME이 이러다보니 HTTP에서도 terminology의 호환을 위해 charset을 MIME에서와 같은 잘못된 의미로 사용하고 있으며, 이 사실에 대해 명시하고 있다. (( RFC 2616 3.4. Character Sets ))
http://www.w3.org/MarkUp/html-spec/charset-harmful.html 의 일독을 권합니다.
좋아요좋아요