노무현 전 대통령 서거 추모글 남기기

유니코드

전공/c, c++, ce 2008. 12. 10. 12:09
원문보기: http://www.itka.kr/zbxe/?mid=debugprog&page=1&document_srl=1051

유니코드는 16비트의 단일한 값으로 지구상의 모든 문자를 표현할 수 있는 문자 코드 체계이다. 유니코드의 등장 배경과 내부적인 구성 원리 등의 자세한 사항에 대해서는 다음에 따로 상세하게 다루되 여기서는 준비만 해 두자. 유니 코드를 지원하려면 문자형이나 문자열에 대해 C언어의 타입을 바로 쓰지 말고 유니코드 설정에 따라 변경되는 중간 타입을 사용한다. C언어에 익숙한 사람들은 앞으로 문자나 문자열을 표현할 때 다음 타읍들을 쓰도록하자

 

C 타입

유니코드 타입

char

TCHAR

char

LPSTR

const char*

LPCTSTR

TCHAR C의 기본 타입 중 하나인 char와 일단 같지만 유니코드로 컴파일할 때는 wchar_t타입이 된다. Wchar_t는 실제로는 unsigned short 로 정의 되어 있으며 부호없는 16비트 정수형이다. TCHAR타입의 실제 정의문은 다음과 같이 조건부 컴파일문으로 작성되어 있다.

 

#ifdef UNICODE

typedef wchar_t TCHAR;

#else

typedef char TCHAR;

#endif

char를 바로 쓴 소스는 유니코드로 바꿀 때 일일이 소스를 뜯어 고친 후 다시 컴파일해야 하지만 TCHAR라는 중간 타입을 사용한 소스는 프로젝트 설정에 따라 소스도 같이 바뀌는 효과가 있으므로 소스는 그대로 두고 컴파일만 다시 하면 된다. 문자열이 필요할 때도 char *를 쓰지 말고 가급적이면 LPSTR또는 TCHAR*를 쓰는 것이 현명하다.

 

C 표준 함수

유니코드 지원 함수

strlen

lstrlen

strcpy

lstrcpy

strcat

lstrcat

strcmp

lstrcmp

sprintf

wsprintf

Strlen char타입의 문자열 길이만 조사하지만 lstrlen TCHAR타입의 묹열에 대해서도 동작하므로 이식에 훨씬 더 유리하다. 문자열 상수도 타입이 있으므로 겹 따옴표안에 바로 문자열 상수를 쓰지 말고 TEXT 매크로로 둘러 싸는 것이 좋다.

TCHAR *str=”string”;       //이렇게 쓰지 말고

TCHAR *str=TEXT(“string”);          //TEXT 메크로 안에 문자열 상수를 쓴다.

TEXT 메크로는 유니코드 설정에 따라 문자열 상수의 타입을 변경한다. 유니코등로 컴파일할 때는 각 문자가 16비트의 유니코드 문자가 되며 그렇지 않을 때는 8비트의 안시 문자가 된다.



Posted by Kelly Cook
,