[출처] 메멘토 (Don't forget)
Linux 프로그래밍할 때, qt 기반 위에서 항상 한글처리가 골치였다.
즉, euc-kr과 utf-8 인코딩 방식의 차이때문에 한글이 깨지곤 했는데,
오늘 1.0 클래식 업그레이드 하면서 다시금 언급된 euc-kr과 utf-8.
그 인코딩 방식의 차이를 알아보고자 자료를 구해봤다.
EUC는 Extended Unix Code의 약자이고, 이 말이 AT&T Bell Lab.1에서 유닉스와 관련해서 유래한 것이고, 한국어 유닉스 환경을 규정한 KS X 2901에서 다루고 있기는 하지만, 그 인코딩 방법은 철저하게 ISO 2022 표준을 좇은 것으로 특정 플랫폼에 얽매이는 것이 아닙니다.
이른바 '완성형'이라고 불리우는 것이 바로 EUC-KR로 Unix, Mac OS, Windows, MS-DOS에서 공히 사용합니다.
EUC-KR에서는 [0x00, 0x1f]와 [0x80, 0x9f]의 두 제어 문자 영역을 보전하면서 GL (Graphic Left : [0x20, 0x7e])과 GR (Graphic Right: [0xa0,0xfe])에 두 개의 부호화된 문자 집합(coded character set)인 ISO 646:IRV (US-ASCII) / ISO 646:KR (KS X 1003)과 KS X 1001:1998을 각각 매핑한 것입니다.3 ISO 646:IRV 4와 KS X 1003의 차이는 0x5c (GL에 invoke한 경우의 코드값)에 가는 글자가 역슬래시이냐 원화 기호이냐에 있습니다.
KS X 1001과 ISO 646 두 부호화된 문자 집합을 인코딩하는 다른 방법에는 ISO-2022-KR (메일 인코딩으로 1990년대 말까지 쓰였던), X11 Compound Text Encoding, Emacs-Mule의 인코딩 등이 있습니다. 이 모두는 한때 그 역할을 훌륭히 수행했지만, CP949, 조합 등과 함께 하루속히 폐기하고 유니코드 기반인 UTF-8, UTF-16 등으로 전환해야 합니다. 그 중요한 이유 중 하나는 오직 유니코드 / ISO 10646만이 한국어를 온전하게 표현할 수 있는 방법을 제공하기 때문입니다.
오늘날 유니코드를 파일에 저장하는 방식은 UTF-8이 가장 일반적이다. UTF-8은 MBCS(ISO-2022)와 비슷하지만 더욱 정교한 방법으로 31비트의 유니코드를 1~6개의 바이트에 나누어 저장하는 방식이다. 첫번째 바이트를 읽는 것 만으로 몇 개의 바이트로 구성된 것인지 알 수 있기 때문에 상당히 정교하다. 그리고 하위 16비트만 표현할 때는 최대 3바이트로 충분하다. UTF-8에서 상위 아스키 코드 영역은 1바이트로 표현될 수 있고 한글은 대개 3바이트를 차지한다.
마이크로소프트는 텍스트 파일의 맨 앞에 UCS-2/4 및 endian을 표시하는 BOM(Byte-Order Mark)라는 특정한 코드를 넣어서 구분하자고 주장하였으나 Unix와 같은 운영체제에는 잘 맞지 않는 방식이었다. Windows NT 4.0 이후로 MS는 UCS-2 형식의 파일을 기본적으로 사용할 수 있었으나 그리 많이 이용되지는 않았고, 최근에 UTF-8이 널리 사용되면서 MS도 UTF-8을 기본적으로 지원하고 있다.
UTF-8은 바이트 단위로 읽혀질 수 있기 때문에 기존의 ISO-2022을 기준으로 작성된 응용프로그램들과 호환성이 높다. 예컨데 UCS-2 문자열은 unsigned short 배열에 저장되어야 하지만, UTF-8 문자열은 기존의 응용프로그램 처럼 char 배열에 저장될 수 있다.
한글코드와 유니코드
* 한글코드와 관련된 자료
한글코드에 대하여 - 정주원
WWW의 국제화와 한국화 - 정주원
코드와 한글 [Code and Hangul]
* 유니코드 관련 자료
ISO/IEC-10646 Universal Multiple-Octet Coded Character Set (UCS)에 대해서 - 정주원
The Unicode Standard(s) - 유니코드의 역사
UTF-8 and Unicode FAQ for Unix/Linux - 강추
UTF-8 and Unicode FAQ for Unix/Linux (한글번역 2001/3/16) - 강추
한글코드뿐만 아니라 문자코드자체에 대해서 이해하고 싶으신 분은 꼭 한번 볼 가치가 있는 글들입니다.
2003년 지금까지도 우리가 주로 쓰고 있는 한글 코드는 완성형 한글 코드... 즉, KS X 5601입니다.
KS X 5601은 KSC 5601의 새로운 이름이죠. 대한민국 정부에서 정하는 한글 코드이고 최근(2002년)에 이름이 바뀌었더군요. 그리고 KS X 5601은 EUC-KR이라는 코드에서 비롯된 것으로 알고있습니다. 그 두 코드는 같은 내용이기 때문에 이름이야 어떻게 부르던 큰 상관은 없습니다. 하지만, 한글 코드에 대해서 관심을 가지는 분들은 인터넷에서는 KS X 5061보다는 EUC-KR이 외국인들에게 더 널리 알려져 있기 때문에 인터넷 문서 (HTML등)에는 EUC-KR로 표기해야 한다고 이야기합니다.
(또, KS X 5601은 ISO-2022 국제 표준을 준수하기 때문에 ISO-2022-KR로도 불리지만 이 이름은 거의 사용되지 않습니다.)
EUC-KR은 유닉스에서 각국의 언어를 표현할 수 있도록 하기 위해 국가별로 언어 코드를 정할 당시에 만들어진 것입니다. EUC-KR은 지금까지 한국의 정보화에 큰 역할을 했음에도 글자수의 한계(2만개 이상의 한글 글자 중에서 2,300여개만 표현 가능) 때문에 많은 원망을 들어야했지요.
한동안 지속되었던 완성형(KS X 5601)과 조합형 한글 코드의 논쟁은 유니코드가 나오면서 수그러들었습니다. 유니코드에서는 1만1천여개의 한글 글자를 표시할 수 있으며, 코드 조합을 통해 조합형과 같이 모든 한글 글자를 표시할 수 있는 여지를 남겨두었습니다. (비록 기본 글자로 모든 한글 글자가 들어갈 수는 없었지만, 6만5천여개의 제한안에 세계 각국의 모든 글자들과 함게 들어가야 하는 상황에서는 충분히 들어간 것으로 보입니다. - 한글이 가장 많은 영역을 차지하고 있음)
댓글 없음:
댓글 쓰기