유니코드

유니코드
Submitted by hyacinth @
얼마전 문득 UNICODE와 _UNICODE 정의의 차이가 궁금해 찾아본 기억이 난다.

윈도우는 유니코드를 사용할 때 UNICODE 매크로를 정의한다. Visual Studio는 C++ 프로젝트를 생성하면 UNICODE와 함께 _UNICODE를 정의한다.

Unicode_.png
[PNG image (33.66 KB)]
유니코드 문자 집합 사용 구성 속성의 차이는 UNICODE와 UNICODE_ 매크로를 정의하는 것 뿐이다.

C 언어는 모든 아이덴티파이어에 항상 언더스코어(_)를 붙인다. 그런데 이것은 C++ 표준안은 아니기 때문에 윈도우 개발팀은 언더스코어를 UNICODE 구분자에 포함하지 않았다. 이런 이유로 두 매크로가 같이 사용되게 된 것이다. 그래서 항상 UNICODE와 _UNICODE를 같이 정의하거나 둘 다 정의하지 말아야 한다.


+
텍스트를 읽고 처리해야하는 애플러케이션의 경우 파일을 읽고나서 텍스트가 ANSI 문자인지 유니코드 문자인지 판별할 수 있으면 매우 편리할 것이다.
윈도우는 AdvApi32.dll에 IsTextUnicode() API가 정의되어 있다.

텍스트 파일의 경우 그 내용이 ANSI 문자인지 유니코드 문자인지 판단할 수 있는 안정적이고 빠른 방법이 없다. 그렇기 때문에 어떤 문자를 담고 있는지 판별하는 것은 매우 어려운 일이다. IsTextUnicode()는 전달된 버퍼의 내용을 통해 확률적statistical이고 규정deterministic에 의거한 방법을 활용한다. 이는 당연히 비과학적인 방법이고 잘못된 결과를 반환할 수 있다. 윈도우 API로는 드문 알고리즘으로 동작하는 함수이기에 재미있다. 버퍼 크기가 충분히 주어지면 더 정확한 값을 기대할 수 있다.

» track back

이 글에는 0 개의 댓글이 있습니다.