반응형
펌]심심할때 읽어보는 문자셋, 인코딩 이야기: 동아시아 문자들  


출처: 신비로 JAVA월드 Soony(fstars@shinbiro.com) 님 게시물 중

http://club4.shinbiro.com/clb/bbs/sbrClbBbs_View.jsp?bbsid=50354&pg=1&artno=429

 

[들어가며]

늘 그렇듯이 초반에는 필받아서 나름대로 열심히 하려는 의욕이 앞섰으나 다른 일에 신경을 집중하다보면 원래 건드렸던 일은 관심에서 뒷전이 되기 쉽다. 인간의 뇌는 완벽한 멀티 태스킹이 잘 안되고 또 된다 해도 멀티 태스킹을 하다보면 양쪽의 일을 다 망치기 쉽상이라....
한쪽에 집중하는 것이 좋은가 보다. 암튼 그래서 이번 강의는 상당히 늦었다는 필자의 핑계..

ㅡ.,ㅡ


[주의]

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

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

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


[8. 동아시아 문자들]

오늘은 동아시아 문자셋과 인코딩에 대해서 간단히 훑어보자.


1. Japan

동아시아 국가중 가장 먼저 고유 문자셋을 정한 일본. 그렇기에 그들이 초창기 고민해서 어렵사리 구축해 놓은 방안들을 이후 한국, 중국 등등을 그대로 갖다가 자기들 글자로 바꾸어 쓰게된다. ㅡ.ㅡ


(1) JIS X 0201   -  반각 카타가나가 포함된 문자셋이다. 앞쪽 128개는 ASCII를 호환하며 뒤쪽 128개의 영역중 카타가나를 배치해서 쓰이던 초창기 일본어 문자셋.


(2) JIS X 0208   -  가장 지금 널리 쓰이고 있는 일본어 문자셋이다. 대부분 2바이트를 엮어 쓰는 MBCS이며 이를 기반으로 하는 인코딩이 EUC_JP 와 Shift_JIS 가 있다. EUC 란 (Extended Unix Coding) 이라 하여 유닉스계열에서 문자수가 많은 나라의 문자셋을 지원하기 위해 쓰이는 인코딩 기법이고 이는 MS가 주도하는 MBCS의 "예약 범위" 기준이 있기 전에 부터 쓰던것이라 서유럽어와는 충돌이 있다. (주로 문자들이 0xA1부터 시작한다.)

이 EUC방식을 충실히 따라서 일본어 문자셋을 인코딩한것이 EUC_JP 이고 반각카타가나의 1바이트 호환성 및 MS측의 MBCS 예약범위 호환성을 지켜서 배치가 EUC와는 다르게 이상해져버린 인코딩이 Shift_JIS이다. (당연 MS측은 Shift_JIS만 지원한다. ㅡ.ㅡ)

참고로 일본에서는 EUC_JP보다는 Shift_JIS를 더 많이 쓴다.


(3) JIS X 0212   -  JIS X 0208 이 주로 사용하는 문자들을 모은거라면 이건 말하자면 학술논문 같은데서나 가끔보는 한자들 같은 주로 쓰이는 문자는 아닌것들을 모아놓았다. EUC_JP에서는 이걸 지원하며 Shift_JIS는 이걸 지원하지 않는다.
(4) JIS X 0213   -  최신 일본어 문자셋이다. 거의 사용치 않는 문자를 좀더 추리고 빈도높은 문자는 다시 재정렬해서 나온 새로운 문자셋.......이나.... MS가 아직 지원 계획이 없다하여 의미가 많이 퇴색했다. 다행히 MacOS X 은 얼마전부터 지원하기로 결정했다.



2. Korea (Republic of)


위에도 이야기했지만 우리나라는 일본어 문자셋 구조를 많이 본떠 왔다. ㅡ.ㅡ 그러나 나름대로 고민하여 개발한 것도 있다. 대표적인게 조합형 한글이다.


(1) KS X 1001   -  현재 우리가 쓰고 있는 문자셋이다. 한국어 처리는 대부분 이 문자셋 하나로 다 처리되며 문자수는 한글, 한자, 기호, 영문, 그리스 문자, 키릴자모, 히라가나, 카타가나 등등을 합해서 약 8천자 정도 된다. 이 문자셋은 EUC_KR, 조합형, CP949등의 인코딩이 지원한다.

참고로 좀더 설명하자면 MS측은 KSC-5601-1987 이라는 이상한 이름을 사용할때가 있는데 이 이름은 KS X 1001 의 옛날 이름이다. 우리가 완성형이라 부르는 한글은 EUC_KR이며 조합형은 문자셋은 이걸 쓰지만 인코딩 방식이 EUC_KR과 달라서 조합형이라 부른다. (하나의 문자셋으로도 인코딩은 여러개가 나올 수 있다 했다. 대표적인게 EUC_JP와 Shift_JIS)

또한 CP949는 확장 완성형이라 해서 MS가 지들 멋대로 EUC_KR에서 몇몇 글자들을 추가 및 위치 변경을 하여 거의 EUC_KR이라 생각해도 되지만 조금은 틀린 녀석이다.

(CP란 CodePage 라고 하여 IBM과 Microsoft 가 같이 사용하던 OS 내부적으로 돌아가는 문자셋 및 인코딩 번호를 의미하는데 그나마 요새는 IBM과 Microsoft 가 갈라져서 새로 지정되는 것은 번호가 양쪽이 틀리다 ㅡ.ㅡ 그래도 아직은 상당부분 같은 번호가 많다. 이 CP에 대한 내용은 나중에 설명할 기회가 있을 것이다.)


(2) KS X 1002   -  마치 JIS X 0212 처럼 자주 쓰이지 않는 옛 글자 및 사용빈도가 드문 한자들을 모아놓은 문자셋이다. 차이점은 EUC_JP는 JIS X 0212를 지원하지만 EUC_KR은 KS X 1002를 지원하지 않는다.. (즉, 이건 지원하는 인코딩이 없다. 사장되었다는 의미이다. 한때 우리 한글 인코딩이 완성형이냐 조합형이냐 로 .... 주로 사용할 인코딩이 뭐냐고 싸운적이 있는데 이때 논쟁에 밀려서 이건 빛도 보지 못했다. ㅡ.ㅡ)


(3) KS X 1005-1   -  유니코드 2.0 이상에서 표현되는 한국어에 대한 문자셋이다. 기본적으로 완성형과 같다고 보면된다. 다만 유니코드 버전이다.


3. China (Peoples Republic of)


중국 본토에서는 GB로 시작하는 문자셋, 인코딩을 사용한다. GB란 Guo-Biao(国标)를 줄여쓴 말로 국가표준이라는 뜻. 참고로 중국어 한자는 크게 2가지로 분류하는데 "나라 국" 자를 줄여서 "国" 이렇게 간략하게 표시한걸 "간체 (Simplified Chinese)" 라 하고 중국 본토에서 많이 쓰이며, "國" 이렇게 제대로 획수 다 그어 표시한걸 "번체 (Traditional Chinese)" 라 하여 대만 홍콩 싱가폴 한국 등지에서 사용되는 모양이다. 일본은 대부분 번체를 사용하지만 간혹 간체처럼 쓰는 한자도 있는데 그게 중국 본토의 간체랑 모양이 틀릴때도 있어서 일본 한자를 "간체"라고 부르지는 않는다.


(1) GB2312     -  중국 본토에서 대부분 경우에 사용하는 간체 중국어 문자셋 이다. 이게 약간 버그가 있어서 수정본이 몇개 있지만 그냥 무시하고 GB2312를 많이 사용한다. 많이 사용하는 한자 7400 자 정도가 포함되어 있고 이 한자들의 번체 버전은 GB/T12345 가 있다.


(2) GB7589     - 마찬가지로 주로 사용하지 않는 좀 드문 한자 7200개 정도의 모임인데 우리처럼 이걸 지원하는 MBCS 인코딩은 없고 단지 유니코드에는 들어가 있다.


(3) GB18030   - 2000년에 확정되어진 중국에서 사용되는 거의 대부분의 한자를 다 밀어넣은 세계 최대 문자셋이다. (유효 코드 문자수만 따지면 ISO-10646-2가 최대지만..)

중국정부는 2001년 9월부터 중국에서 발매되는 모든 OS는 저 GB18030을 반드시 지원해야한다고 강압적으로 확정시켰다. ㅡ0ㅡ

이 문자셋은 GB2312 와 완벽한 호환에 한글자당 1~4바이트의 가변적으로 길이가 변한다.

UTF-8 이 한글자에 1~6바이트 까지 변하는것에 비해 훨씬 효율이 좋으므로 중국어의 입장에서만 봐서는 더 낫다.

아무튼 이건 중국정부의 강제 규정이므로 MS도 부랴부랴 유니코드에서부터 GB18030 으로 변환하는 BytesToUnicode, UnicodeToBytes 라는 함수를 제공하여 해결했는데 좀... 이름이 이상하지? GB18030에 대한건데. Bytes라니..


4. China (Republic of , Taiwan)


요즘 본토와 사이가 더욱 나빠진 대만이다.


(1) Big5     -  대만은 글자수가 많기로 유명하다. 위에서 이야기 했듯이 전통 번체를 사용하며 글자수 약 13500개의 번체 글자로 이루어진 문자셋이다. 문제는 이 Big5는 버그가 있어서 같은 글자가 2군데 배치된 경우가 2가지 있다 하지만... 워낙 버그 있는채로 사용된지 오래되다보니 걍 무시하고 사용한다. ㅡ.ㅡ

이 Big5는 확장버전이 있는데 Big5 Plus 라고 8천자 더 추가해서 약 2만자 정도를 표현하는 문자셋도 있다.


(2) CNS11643   - 대만이 Big5 의 버그도 없애도 좀더 잘, 많이 정리하여 총 16개의 Plane을 가지는 문자셋을 제작하겠다고 야심차게 발표했던 문자셋이다. 완성만 된다면 무려 14만 글자를 가지게되는 무시무시한 녀석인데.. 그러나 아직도 확정 중 단계이고 이미 MS 나 Mac 에서는 기다리기 지루해서 Big5를 대만판 OS 표준 인코딩으로 잡았기 때문에 이게 쓰이는 일은 극히 드문일이 되버렸다. ㅡ.ㅡ


5. Korea (Democratic Peoples Republic of)


하하.. 북한도 고유의 문자셋을 가지고 있다. 모르시는 분들도 많을 듯..^^


(1) KPS-9566     - 북한의 유일한 문자셋. 다른 CJK(중국, 일본, 한국) 문자셋 들과 비슷한 구조로 만들었는데..... 한글모양이 우리보다 300글자 정도 많고 대신 한자는 200글자 정도 적다.


아.. 그리고 한가지 재미있는 사실은 한글 부분의 시작이 "가" 가 아니고 "김일성김정일" 이렇게 6글자가 먼저 배치되어 있다. ㅡ.ㅡ (우헤헤.. 이게 모냐면 한글을 순서대로 정렬하면 "김일성김정일" 이 맨 먼저 나온다는 것이다. 이넘들 뭐하는 짓인지..)

그리고 우리 한글과는 북한은 정렬 순서가 다르다. 일례로 자음의 정렬 순서가

"ㄱㄴㄷㄹㅁㅂㅅㅈㅊㅋㅌㅍㅎㄲㄸㅃㅆㅉㅇ"  으로 "ㅇ"이 젤 뒤로간다... 아마도 두음법칙이 없는 구조라서 그런가보다.


암튼 이렇게 고유 문자셋이 있지만 MS측은 KPS-9566을 지원하지 않고 있어서 실제로는 EUC_KR과 UTF-8을 이용하는 경우가 많다. 또한 유니코드도 우리측 정렬을 따르고 있으므로 만약 북한 글자를 다룰일이 있으면 정렬은 따로 함수를 만들어 다시 해줘야 할 것이다. ㅡ.ㅡ


[마치며]

참 많다.. 나라마다 쓰는 문자가 다르고 같은 언어권이라도 정책의 차이, 역사적 이유 등등으로 문자셋과 인코딩이 다 틀리다... ㅡ.ㅡ 여러분 같으면 모든 글자들을 다 지원하는 하나의 거대한 문자셋 표준을 정하고 모두 그걸로 통일 시키고 싶지 않은가? 그럼 더이상 인코딩으로 고민하고 자시고 할 것이 없지 않겠는가? 표준이 모두 커버되는 1개라면...
그렇다.. 이런 생각 이미 머리 높으신 분들이 지내시다 보니 하셨나 보다..

그게 UNICODE라는 것이다.

반응형
Posted by Real_G