[펌] 유니코드 코드변환
GDI+를 사용하게 되면 문자는 기본적으로 유니코드를 사용하게되어 있다.
그렇기 때문에 ANSI코드를 직접 입력하게 되면 문자가 깨져나오는 불상사가 생기게 된다.
그렇기때문에 #define UNICODE 메크로를 사용하여 코드가 유니코드를 사용하게 해야하는데 이는 아직 익숙치 않은 것이라 ANSI를 UNICODE로 변환하여 사용하는 방법을 사용한다. 물론 익숙하지 안은 것이외에도 반드시 코드변환을 사용해야 할 경우는 있다.
텍스트 파일에 있는 문자를 읽어 올 때에는 아직까지 모든 텍스트 파일의 문자는 ANSI로 되어 있기 때문에 이를 UNICODE로 변환 해야하는 경우가 있을 수 있다.
ANSI 코드를 UNICODE로 변경시켜주는 API 함수는 MultiByteToWideChar()이 있다
MultiByteToWideChar ( UINT CodePage, //변환대상의 코드페이지 DWORD dwFlag, //변환 Flag LPCSTR lpMultiByteStr, //변환대상 MBCS 문자열 int cbMultiByte, //변환대상 문자열 길이 -1이면 자동으로 길이 계산 LPWSTR lpWideCharStr, //변환결과를 저장할 버퍼 int cchWideChar //변환결과 문자열 길이 보통 변환대상의 2배로 설정한다. ) |
UNICODE 를 ANSI로 변환할때는 WideCharToMultiByte()를 사용한다.
MultiByteToWideChar ( UINT CodePage, //변환대상의 코드페이지 DWORD dwFlag, //변환 Flag LPCWSTR lpWideCharStr, //변환대상 MBCS 문자열 int cchWideChar, //변환대상 문자열 길이 -1이면 자동으로 길이 계산 LPSTR lpMultiByteStr, //변환결과를 저장할 버퍼 int cbMultiByte, //변환결과 문자열 길이 LPCSTR lpDefaultChar, //변환할 수 없는 문자를 대신할 문자 LPBOOL lpUsedDefaultChar //기본으로 설정된 lpDefaultChar여부를 확인 ) |
char *amsg = "Good programming!"; wchar_t wstr[100];
wchar_t *wmsg = L"Perpect programming!"; char astr[100];
MultiByteToWideChar(CP_ACP, 0, amsg, -1, wstr, 100);
WideCharToMultiByte(CP_ACP, 0, wmsg, -1, astr, 100, NULL, NULL); |
위와 같이 MultiByteToWideChar 와 WideCharToMultiByte 를 사용해서 코드를 변환 할 수 있지만 문자열이 간단한 것이라면 다음과 같이 wsprintfW 와 wsprintfA를 사용해 더욱 간단하게 코드 변환을 할 수 있다.
char *amsg = "Good programming!"; wchar_t wstr[100];
wchar_t *wmsg = L"Perpect programming!"; char astr[100];
wsprintfW(wstr, L"%S", amsg);
wsprintfA(astr, "%S", wmsg);
%S에서 s가 대문자인 것을 유의해야한다. |
API는 ANSI 와 UNICODE의 혼합 사용을 지원하기 위해 매크로를 지원하고 있다. 실제로는 무척 많은 양이지만 압축하면 다음과 같다.
일반형 | UNICODE | ANSI | Description |
TCHAR | wchar_t | char | 문자 |
LPTSTR | wchar_t* | char* | 문자열 |
LPCTSTR | const wchar_t* | const char* | 문자열 상수 |
TEXT("문자열")을 사용하면 ANSI, UNICODE 에 상관없이 해당 코드 환경에 알맞게 문자열을 변환해준다.
출처 : http://blog.daum.net/crexy/7265111
'Programming > C/C++' 카테고리의 다른 글
[펌] C++, 가상함수,순수가상함수 (2) | 2010.03.14 |
---|---|
[펌] 프로그램, 프로세스, 스레드 (0) | 2010.03.13 |
[펌] 메모리 할당자의 단편화 문제점 (0) | 2010.03.13 |
[펌] 동기화 객체 (1) | 2010.03.13 |
[펌] 문자열 인코딩 (0) | 2010.03.13 |