2006년 04월 06일
[유니코드] 간단한 문자 출력 테스트
먼저 기본언어판의 문자를 출력해 보자.
dc.TextOut(0, 0, 0xac00);
CString s = L"가";
TRACE(L"%x", s.GetAt(0));
첫번째 라인은 화면에 '가'를 출력할 것이고,
두번째 이후는 0xac00를 디버그창에 출력할 것이다.
어렵지 않다.
그럼 이제 확장영역인 보충언어판(Supplementary Plane)에 있는 문자를 출력해 보자.
보충언어판의 맨앞의 문자인 00010000을 출력하기 위해..
dc.TextOut(0, 0, 0x00010000);
이렇게 하고 싶지만, 되지 않는다.
유니코드용 문자열은 2바이트 기반이기 때문에 보충언어판의 4바이트 기반의 코드값을 바로 사용할 수는 없다. 이미 언급했듯이, 보충언어판의 문자를 출력하기 위해서는 대행코드를 이용해야 한다. 올바른 결과를 얻기 위해서는 다음과 같이 수정해야 한다.
wchar_t c[3] = {0xd800, 0xdc00, 0};
dc.TextOut(0, 0, c);
다시말해 UTF32형태의 0001000 값은 UTF16형태의 d800과 dc00 값으로 변환되어야 한다
인코딩 관련 소스는 http://www.unicode.org/Public/PROGRAMS/CVTUTF/ 에서 참고할 수 있다. (UTFConv.zip)
마지막으로, 한가지 작업이 더 남았다.
위 샘플은 아무것도 출력하지 못하는데, 이유는 폰트가 없기 때문이다.
보충언어판 1의 폰트는 CODE2001.TTF, 보충언어판 2의 폰트는 CODE2002.TTF로 확인해 볼 수 있다. (폰트참고)
최종샘플이다.
CFont font;
font.CreatePointFont(200, _T("Code2001"));
CFont* pold = dc.SelectObject(&font);
wchar_t c[3] = {0xd800, 0xdc00, 0};
dc.TextOut(0, 0, c);
dc.SelectObject(pold);
font.DeleteObject();
dc.TextOut(0, 0, 0xac00);
CString s = L"가";
TRACE(L"%x", s.GetAt(0));
첫번째 라인은 화면에 '가'를 출력할 것이고,
두번째 이후는 0xac00를 디버그창에 출력할 것이다.
어렵지 않다.
그럼 이제 확장영역인 보충언어판(Supplementary Plane)에 있는 문자를 출력해 보자.
보충언어판의 맨앞의 문자인 00010000을 출력하기 위해..
dc.TextOut(0, 0, 0x00010000);
이렇게 하고 싶지만, 되지 않는다.
유니코드용 문자열은 2바이트 기반이기 때문에 보충언어판의 4바이트 기반의 코드값을 바로 사용할 수는 없다. 이미 언급했듯이, 보충언어판의 문자를 출력하기 위해서는 대행코드를 이용해야 한다. 올바른 결과를 얻기 위해서는 다음과 같이 수정해야 한다.
wchar_t c[3] = {0xd800, 0xdc00, 0};
dc.TextOut(0, 0, c);
다시말해 UTF32형태의 0001000 값은 UTF16형태의 d800과 dc00 값으로 변환되어야 한다
인코딩 관련 소스는 http://www.unicode.org/Public/PROGRAMS/CVTUTF/ 에서 참고할 수 있다. (UTFConv.zip)
마지막으로, 한가지 작업이 더 남았다.
위 샘플은 아무것도 출력하지 못하는데, 이유는 폰트가 없기 때문이다.
보충언어판 1의 폰트는 CODE2001.TTF, 보충언어판 2의 폰트는 CODE2002.TTF로 확인해 볼 수 있다. (폰트참고)
최종샘플이다.
CFont font;
font.CreatePointFont(200, _T("Code2001"));
CFont* pold = dc.SelectObject(&font);
wchar_t c[3] = {0xd800, 0xdc00, 0};
dc.TextOut(0, 0, c);
dc.SelectObject(pold);
font.DeleteObject();
# by | 2006/04/06 16:33 | ▶프로그래밍 | 트랙백 | 덧글(0)











☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]