ProgUnicode :: 2006/10/15 17:37

  1. 유니코드.
    • 너무 많은 자료들이 산재해 있어서 정리할 필요가 있다고 생각했다. 이해하기도 어렵게 되어있거니와 UTF-8 이 뭔지 UTF-16 이 뭔지 속시원히 설명해준 곳은 정말로 흩어져 있었다. 그리고 기본 지식이 있어야 유니코드와 관계된 글을 이해할 수 있다. 이 글이 유니코드가 뭔지 감이 안 오는 분들에게 도움이 되었으면 한다. 필요하다 싶은 말은 원문을 그대로 가져와서 명시 해놓았다. 참고로 (!-- 괄호 안에 쓴 말은 저의 추측이고--) 나머지는 얻은 자료를 바탕으로 쓴 것임.
  2. What is Unicode?
    • 1980 후반, 두개의 단일 통합 문자 체계를 만들려는 움직임이 있었다. 그 중 하나가 'International Organization for Standardization(ISO)' 라는 국제 표준기구에서 진행하는 'ISO 10646' 프로젝트 였고 나머지 하나는 'manufacturers of multi-lingual software' 에서 구성한 'Uicode Project' 프로젝트 였다. 당연히 그들이 원하는 것은 하나의 단일된 문자 체계였고 'Single Code Table' 을 같이 만들게 되었다. 두개의 프로젝트는('ISO 10646'와 'Unicode Project') 아직까지도 각각 독립적으로 표준을 발표하고 있다.(!-- 그들이 각자의 이름을 유지하고 싶었나 봅니다 --) 그렇다고 Single Code Table 이 다른것은 아니다. 서로 협력하여 작업 하고 있기 때문에 이름만 다르다 뿐이지 같은 내용을 가지고 있다. '''''All characters are at the same positions and have the same names in both standards.'''''
    • 결론 - 결국 Unicode 라는 것은 단일 코드 테이블이다. 그 이상 그 이하도 아닙니다.
  3. What are UCS and ISO 10646?
    • 국제 표준 'ISO 10646' 이 정한 문자 집합을 유식하게 'Universial Character Set(UCS)' 라고 부릅니다. 거대한 코드 테이블이죠. UCS 코드 테이블은 모든 문자 집합(Character Set)들을 포함 하고 있다. It guarantees round-trip compatibility to other character sets. 라운드 트립 호환성을 보장합니다. 이 말은 어떤 Character Set 에 있는 문자를 UCS 코드 테이블에 있는 것으로 바꾸었다가 다시 원래 Character Set의 문자로 바꿀 수 있다는 것입니다. 만약 모든 문자를 포함하지 못한다면 이런말을 못했겠죠. UCS 는 현재 계속 유지 되고 있으며 업데이트가 되고 있습니다. 많은 문자들이 시간이 지나면 더 추가 되겠죠.
      'ISO 10646' 은 31 bit Character Set 을 정의 했습니다. 그 31 비트중 2의 16 개의 문자 집합들을 판이라고 합니다. 자주 쓰이는 문자들은 'Basic Multilingual Plane(BMP)' 라고 불리우는 첫번째 문자 판(Plane)에 위치해 있습니다. 예전 수업시간에 '지구는 여러개의 판으로 이루어 졌고, 그 판은 움직이고 있다' 라는 말 들어 보셨죠? UCS 에서도 이런 판(Plane)의 개념을 씁니다. BMP 이상의 영역에 위치한 문자들은 거의 특수한 문자들입니다. 과학기호라던지 역사속에 나오는 그런 문자들. 현재 계획으로는 21 비트를 초과한 문자영역은(0x000000 ~ 0x10FFFF 를 초과한 영역) 쓰지 않을 것이라고 합니다. (!-- 31 비트를 전체 영역으로 잡아 놓고 21 비트만 쓰기로 했다네요. 21 만 해도 어마어마한 코드 테이블인데 굳이 한계를 둔 이유는 저도 모르겠네요 --)  
      'IS0 10646'도 한번에 바로 나온것이 아닙니다. 몇번의 수정이 있었습니다. 1993 년에 처음으로 'IS0 10646-1' 라는 것이 발표 되었는데 Character Set 의 구조와 BMP 의 내용이 담겨 있었습니다. 2의 16비트까지의 코드 테이블을 만들어서 발표 했다는 말입니다. 그 이후 2001 년에는 'ISO 10646-2' 라는 BMP 이상의 영역에 문자를 정의한 코드 테이블을 발표합니다. 결국 2003 년에는 BMP 영역과 BMP 이상의 영역을 서로 묶어서 'ISO 10646' 표준을 발표합니다. 이렇게 'ISO 10646'은 현재 계속 진행 중인 프로젝트이며 새로운 문자들이 계속 추가 되고 있습니다.
  4. What different encodings are there?
    • 이미 언급했듯이 UCS 와 Unicoe standards 는 큰 코드 테이블입니다. 'UCS' 'ISO 10646' 'Unicode' 라는 용어는 Character 와 Interger 간에 맵핑을 말하는 것입니다. 이 용어만 가지고는 어떻게 코드를 memory 에 저장할 것인지 알 수 없습니다. 여기서 중요합니다. 이미 국제 표준에서 코드 테이블을 정의해 놓았습니다. 한 문자는 그에 해당하는 Interger 값을 가지고 있습니다. 이것을 memory 에다가 어떻게 담느냐 하는 방법을 정의한 것(Encoding)이 UCS-2, UCS-4, UTF-8, UTF-16, UTF-32 입니다. 전 여기서 질문이 생겼습니다. 그냥 정의 한대로 메모리에다가 담으면 되잖아? 무슨 방법이 더 필요해? 결론은 그냥 memory 에 담으면 안된다는 것입니다. 왜 여러가지 방법들이 생기게 되었는지 이제 알아 봅시다.
  5. What are UCS-2 and UCS-4?
    • 그 첫번째 방법이 정의 된 대로 memory 에 담는 것입니다. Character 에 해당하는 값을 2byte 에 저장하면 UCS-2 edncoding 이며, 4byte 에 저장하면 UCS-4 encoding 입니다. 'ISO 10646-1' 이 정의 될 당시에 UCS-2,UCS-4 encoding 이 같이 발표 되었는데, 걔네들도 저랑 같은 인간이었나 봅니다. 가장 간단하게 그냥 메모리에 담는 방법을 같이 발표 했네요. 다만 UCS-2 와 UCS-4 로 나눈 이유가 궁금한데요, 발표할 당시가 1993 년 이었습니다. BMP 이상의 영역에 문자를 담아서 발표한 것이 2001 년이었습니다. BMP 이상의 영역에 Character 를 채우는 일은 꽤 늦게 시작된 것을 짐작할 수 있습니다. (!-- 2 16 에다가 문자를 다 채우는 일이 쉬운 일이 아니었나 봅니다.) 즉 UCS-4 encoding 을 쓸 이유가 없었던 것입니다. 정의된 모든 것들이 BMP 영역 안에만 있었기 때문에 16 비트를 벗어나는 일이 없었던 것이죠.
    • 결론 - UCS-2 encoding 은 U+0000 ~ U+FFFF 까지 문자들을 표현할 수 있고 UCS-4 encoding 은 U-00000000 ~ U-7FFFFFFF 까지 표현할 수 있다.
  6. What is UTF-8?
  7. What is UTF-16?
  8. What is UTF-32?
  9. 참고 자료
    1. * http://www.cl.cam.ac.uk/~mgk25/unicode.html
    2. * http://www.jinsuk.pe.kr/Unicode/Unicode_intro-kr.html
    3. * [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/ime_4omx.asp MSDN Home >  MSDN Library >  Win32 and COM Development >  User Interface ]
Trackback Address :: http://kbckbc.mireene.co.kr/tatter/kbckbc/trackback/52
Name
Password
Homepage
Secret