이글루스 | 로그인  



[유니코드] 기본언어판, 보충언어판 그리고 대행코드

기본 언어판 (기본 다국어 언어판)

줄여서 보통 BMP(Basic Multilingual Plane)로 표현한다. 비트맵이 아니다.
0x0000 - 0xFFFF 까지의 영역을 표현.
2바이트로 2^16, 즉 65,536개의 문자를 표현할 수 있다.


보충 언어판

Supplementary Plane이라고 한다. 16개의 언어판이 존재한다.

이전에도 언급했듯이 한자만 보더라도 기본 언어판으로는 세상의 모든 언어를 감당하기는 힘들다. 그래서 유니코드 3.0 부터는 보충 언어판을 정의했는데 예상대로 한자가 4만여자로 가장 많이 할당받았으며 그 밖에도 음악관련 기호, 수학용 문자및 기호등이 더 추가되었다.

0x00010000 - 0x0001FFFF 보충 언어판 (Supplementary Multilingual Plane)
0x00020000 - 0x0002FFFF 보충 표의문자판 (추가 한자영역)
0x00030000 - 0x000DFFFF 아직 사용안함
0x000E0000 - 0x000EFFFF 특별 보충판
0x000F0000 - 0x0010FFFF 사용자 영역

그렇다면, 보충언어판의 문자는 어떻게 표현해야 하는가 궁금해 진다.
유니코드용 문자열은 2바이트 기반의 wchar_t를 사용하는데, 보충언어판의 문자의 코드값은 이미 2바이트 범주를 넘어서지 않았는가..
여기서 부터, 골아픈 문제들이 다시 시작하게 된다.
이를 해결하기 위해, 기본 언어판에는 대행코드 영역이라는 것이 있는데 상위 대행코드와 하위 대행코드를 조합해서 보충언어판의 문자를 표현하자는 것이다.
결국 2바이트가 꼭 한개의 문자를 의미하는 것이 될 수 없다. 한개를 읽어보고 대행코드이면 한개를 더 읽어 한 문자를 완성해야 한다. 이는 마치 DBCS를 판단하기 위해 했던 짓과 거의 동일한 짓을 해야만 한다는 것을 의미한다.

기본 언어판의 대행코드 영역은 다음과 같다.

상위 대행코드 (High Surrogates) : D800 - DBFF
하위 대행코드 (Low Surrogates) : DC00 - DFFF

1024개의 상위 대행코드와 1024개의 하위 대행코드가 조합될 수 있으므로, 2^10 x 2^10, 즉 2^20개의 코드를 표현할 수 있다. 이것을 다시 표현해 보면 2^4 x 2^16으로, 위에서 언급했듯이 16개의 보충언어판을 표현할 수 있는 것이다.

by 空想 | 2006/04/05 14:38 | ▶프로그래밍 | 트랙백(1) | 덧글(0)

돌잔치 초대장

준우가 드뎌 첫돌을 맞이합니다.

초대장에 날짜가 잘못되었네요. 2006년인데..

 


by 空想 | 2006/04/04 10:33 | ★아빠되기 | 트랙백 | 덧글(5)

[유니코드] 한글과 한자 영역

한글

현대한글은 초성(19개), 중성(21개), 종성(28개)로 총 11,172자가 조합되어 나올 수 있으며, 유니코드의 AC00 - D7AF 영역에 모든 조합가능한 문자가 완성되어 배열되어 있다.
하지만, 옛한글을 포함한다면 초성(90개), 중성(66개), 종성(82자), 채움(2자)로 대략 50만자가 조합되어 나올 수 있는데 말이 50만자이지 50만자를 유니코드에 포함시킨다는 것은 사실상 불가능에 가깝다. 그래서 1100 - 11FF 영역에는 조합이 가능한 자모 240개만이 배열되어 있다.
결국, 유니코드는 한글 표현을 위해 완성형(유니완성형)과 조합형(유니조합형) 두 가지 모두 처리할 수 있도록 지원하고 있는 셈이다.

좀 더 자세한 정보는, 한글 및 한국어 정보 처리 코드 (backup.zip)에서 얻을 수 있다.
완성형에서 유니코드까지의 한글코드 변천과정및 문제점등 전반적인 내용을 확인해 볼 수 있는 곳이다.

이 밖에, 3130 - 318F 영역에 또다른 한글자모를 볼 수 있는데 이곳은 기존 한글완성형 코드에 있던 자모와의 호환을 위해 배치된 것이다.


한자

정확한 총 개수는 알 수 없으나, 실제로 사용되는 것은 3,000자 내외라고 한다.
유니코드의 기본언어판에는 약 2만여자가 포함되어 있으며, 4E00 - 9FFF 영역에 배열되어 있다. (유니코드 3.1 이후에는 약 4만여자가 보충언어판에 더 추가되었다.)

◆편해(篇海): 금(金)왕조시대의 자전 54,000자 수록
◆해편(海篇): 명(明)왕조 시대의 자전 54,000자 수록
◆강희자전(康熙字典): 청(淸)왕조 시대의 자전 47,000 자 수록
◆대한화사전(大漢和辭典): 현대 일본 사전 50,000자 수록
한어대자전(漢語大字典): 현대 중국 사전 56,000자 수록
◆중화자해(中華字海): 현대 중국 자전 85,000자 수록
◆금석문자경(今昔文字鏡): 현대 중국 자전 85,000자 수록

by 空想 | 2006/04/03 12:07 | ▶프로그래밍 | 트랙백 | 덧글(1)

[유니코드] 문자및 폰트 참고에 유용한 곳

FileFormat.Info
http://www.fileformat.info/info/unicode/index.htm
http://www.fileformat.info/info/unicode/char/search.htm

보고자 하는 문자의 코드값을 직접 입력하면, 실제 문자의 모양과 그 문자를 포함하고 있는 폰트등의 정보를 알 수 있다. 그 밖에도 많은 정보를 포함한다. 아주 유용한 사이트임.


Unicode Font
http://home.att.net/~jameskass/

유니코드에는 아직도 코드값은 부여받았지만 실제 확인해 볼 수 없는 문자들이 상당히 많다.
특히, 유니코드 3.0부터 정의된 보충언어판이라 불리우는 확장영역(Supplementary Planes)의 문자들은 대부분 없다.
하지만, 이곳에서는 전부는 아니지만 상당부분을 확인해 볼 수 있는 폰트를 다운받을 수 있다.

CODE2000.ZIP : Shareware demo Unicode font (v1.15)
CODE2001.ZIP : beta test font for Plane 1
CODE2002.ZIP : beta test font for Plane 2

by 空想 | 2006/04/02 16:05 | ▶프로그래밍 | 트랙백 | 덧글(0)

[유니코드] ANSI version과 같이 사용할 때 메모리릭 문제

Memory leaks are reported when you use multiple MFC DLLs

유니코드(UNICODE)로 빌드된 DLL, 그리고 비유니코드(ANSI)로 빌드된 어플리케이션.
어플리케이션에서 유니코드용 DLL을 LoadLibrary한 후, FreeLibrary만 하면 이상하게 메모리가 줄줄 샌다.
아무짓도 안하고 단지 LoadLibrary와 FreeLibrary만 해도 샌다.

이밖에도,
MFC42d.DLL, MFC40d.DLL와 같이 다른 버전을 섞어서 사용해도 같은 문제가 발생한다.

결론부터 말하면, 잘못된 경고이므로 무시해도 된다.

FreeLibrary할 때, 메모리릭이 발생하므로,
ExitInstance를 다음과 같이 override해서 진짜 릭(Leak)과 가짜 릭을 구분하라고 권장하고 있다.

int CTestDllApp::ExitInstance()
{
TRACE(_T("ExitInstance() for regular DLL: TESTDLL "));
return CWinApp::ExitInstance();
}

원문보기

by 空想 | 2006/04/01 17:10 | ▶프로그래밍 | 트랙백 | 핑백(1) | 덧글(0)

◀ 이전 페이지          다음 페이지 ▶