반응형

심심할때 읽어보는 문자셋, 인코딩 이야기:ISO 및 UNICODE | java 검색  2006.04.24 16:47  
 
[들어가며]


세상엔 다양한 언어들이 있다. 이 언어의 장벽은 비단 실생활에서만 있는것이 아니고 디지털 세상에서도 분명히 존재한다. 비록 아직은 소프트웨어 기술이 언어의 장벽을 완전히 허물수는 없지만 언젠가는 자국어 하나만 알아도 모든 언어로 알아서 번역해주는 프로그램이 나오길 기대해보자... ^^ 그럴려면 일단 모든 언어를 표시는 할 줄 알아야 겠지...?

이제 UNICODE 의 시작이다.


[주의]

이 글은 정말 초보를 대상으로 작성된 글로써 필자는 이글에서 논의되는 내용의 좀더 심층적인

문제나 어투등을 문제 삼는 리플을 정중히 사양합니다. 단, 잘못된 점의 지적은 환영합니다.^^

표현의 원할함을 위해서 존칭은 생략했습니다.


[9. 세계의 문자를 하나로... ISO-10646 & UNICODE]

소시적 DOS시절에 일본어판으로 나온 삼국지를 하기 위해 필자는 DOS의 config.sys 파일을 수정하여 일본어폰트를 로딩하고 삼국지를 즐겼던 적이 있다. 그럴때 마다 불편했던 것이 일반적인 다른 프로그램을 돌릴때는 config.sys 를 원래대로 돌려놓아야 한글 환경으로 로딩되기 때문에 한창 삼국지를 잼있게 하다가 이제 다른거 해야지라는 생각이 들면 꼭 재부팅을 해야했다. ㅡ.ㅡ

DOS 6.0 시절 부터인가 여러개의 설정을 골라서 부팅 할 수 있는 멀티 부팅 기법이 적용되었지만 근본적으로 시스템이 사용하는 인코딩을 하나로 고정하여 만약 다른 언어 인코딩에 대응하고 싶다면 관련 파일을 교체하여 로딩되도록 재부팅을 하는것은 마찬가지 일이다.


우리가 텍스트 파일에 글을 입력하여 정보를 저장하면 컴퓨터는 0xA1 0x65 0xB4 ... 등과 같이 단지 이진 바이트로 정보를 저장한다. 이 정보는 어느 나라 사용자의 컴퓨터에서나 모두 0xA1 0x65 0xB4 ... 이렇게 동일한 바이트 정보로 전달될 수 있다. 단지 그 글을 사용자가 제대로 해석할 수 있느냐 없느냐는 문자셋과 인코딩에 달린것이다.


같은 바이트 정보라도 문자셋과 인코딩에 따라 다르게 표현될 수 있다는 내용은 이전 강의에서 수차례 언급한 적이 있다. 그러므로 이러한 혼동을 없애기 위해서는 세계의 문자를 다 표현할 수 있는 크고 표준적인 문자셋과 인코딩이 필요하다.


안타깝게도 쌀나라 인류가 너무 좁게만 생각하여 문자의 단위를 1바이트로 잡아버리고 동아시아에서는 어떻게든 충돌을 피하려고 상위 비트로 구별하는 등 별별 방법을 써왔지만.. 일단 인코딩 방법은 무시하고 문자셋이라도 모아보자는 생각에 80년대 중반부터 국제적인 정보표현의 표준을 담당하는 기관들의 협력으로 국제 표준 문자셋을 만들려는 노력이 시도된다.


여기서 역사 공부를 조금 해보자..

ISO-10646은 원래 국제 표준기구(ISO) 와 국제 전자 기술 위원회(IEC) 의 산하 위원회인 ISO/IEC JTC1 SC2 WG2 라는 위원회에서 제정중인 국제 표준이었다.

이 표준은 한글자를 4바이트 단위로 할당하면서 문자셋과 인코딩이 결합되던 기존의 방식을 탈피하여 하나의 문자셋으로 인코딩만 다르게 해주면 어느 언어 체계에서도 사용이 가능하도록 고안되었다. 그런데 그 구조가 복잡하고 한 글자에 4바이트씩 소모된다는게 그리 쉽게 수용할 만한 일은 아닌것이다. 생각을 해보자 . 대문자 'A' 라는 글자 하나 찍을때 0x41 한 바이트면 전세계 어디서나 알아듣는 판국인데 이걸 0x00 0x00 0x00 0x41 라는 4바이트로 꼭 표기해야하는가 말이다. 


한편, ISO-10646의 4바이트 표준 제정에 대한 불만 및 확정에 대한 지지부진에 반하여 1989년

Apple, Metaphor, RLG, Sun, Xerox 등은 자신들의 OS에 다국어 지원에 대한 부분을 강화하기 위해서 Unicode Working Group 이라는 걸 조직한다.


이후 Unicode Working Group은 이름을 Unicode.Inc. 로 바꾸고 1991년 ISO-10646의 다국어 부분에 대한 표준 제정이 지지부진하니까 UNICODE 를 가져다 쓰는게 어떻겠냐고 국제 표준 위원회에 제안하여 ISO가 이를 받아들인다.


첨에 ISO-10646이 한글자를 4바이트로 하려 했던것은 현대 뿐만 아니라 학술적 이용가치가 있는 고대 언어 문자 및 추가로 제정될 지 모르는 문자까지 대비하여 공간 영역을 크게 잡은 것이었다. 그러나 비록 1바이트 ASCII 시절에 동아시아 문자를 대비하지 못해 애로사항이 많았던 과거가 있다 할지라도 4바이트 영역은 너무 크게 잡은 것이다.  4바이트가 가질 수 있는 경우의 수는 약 42억개가 된다. ㅡ.ㅡ 지구상에 아무리 많은 언어와 문자들이 있다해도 42억개를 채울 만큼은 아닐것이다. 물론 저 4바이트가 모두 문자만 할당되는 것은 아니고 구조가 복잡하긴 하지만 적어도 현대에 사용되고 있는 문자들 게다가 흔히 사용되지 않는 문자들을 제외하고 실용적인 각국의 문자들을 모으면 충분히 2바이트에 다 담을 수 있으니 ISO가 학술적 표준에서 문자셋을 접근했다면 Unicode.Inc 는 실용적 측면에서 문자셋을 접근했다 하겠다.


ISO-10646 에서 구조상 Group 00 및 Plane 00 인 부분을 BMP(Basic Multiingual Plane) 이라하는데 구조적 용어는 제쳐두고 일단 실용적으로 현재 쓰이는 문자가 할당된 영역이라 생각하자.

이 BMP 영역은 그 자체로 2바이트 코드 부호화 될 수 있는데 이 부분에 대해 Unicode.Inc 가 문자셋을 제안한 것이고 ISO 가 이를 받아들여 ISO-10646의 2바이트 실제 사용 영역은 UNICODE 문자셋과 같다.


이후 1992년 세계의 문자를 한군데 모으려는 노력을 양쪽에서 진행하는 것은 노력 낭비라 여겼는지 ISO와 UNICODE 는 통합되며 ISO/IEC JTC1/SC2/WG2 제 22차 회의에서 ISO-10646을 확정 국제 표준으로 제정되었다. 그러나 ISO-10646이란 이름은 일반인들에게는 쉽게 와 닿는 이름이 아니기에 우리에겐 일반적으로 UNICODE 라는 이름으로 더 잘알려져 있다.


[마침]

UNICODE 에 대한 강의가 본격적으로 시작되었다. 어려운 구조적 내용은 최대한 자제하고 실용적이며 이해하기 쉬운 정도에서 강의를 진행하려고 한다. 세상 모든일이 그렇듯 빠삭하게 알려고 하면 덩달아 알아야 하는 것들이 한 두개가 아니다. 우린 쉽게쉽게 개괄적인 내용만 이해하여 프로그래밍 및 실제 컴퓨터 생활에 약간의 도움이 되면 그걸로 만족하자. ^^
 

반응형
Posted by Real_G