2020년 4월 4일 토요일

MFC UTF8 문자열 Ansi 문자열 변환.

Ansi 문자열을 UTF8 문자열로 변환하는것은 아래 포스트를 확인하시면 됩니다.
https://ansur.blogspot.com/2020/04/mfc-ansi-utf8.html

이번에 이야기 할것은 웹에서 데이터가 들어올때는 UTF8 코드 페이지로 기본적으로 들어 올겁니다.
이떄 가지고 계신 시스템이 Ansi 코드 페이지로 운영이 되시면 문자열 변환을 해야 합니다.
그 처리 방법에 대한 코드를 설명 하고자 합니다.

일단 UTF8 문자열을 Ansi 문자열로 변환 하는 코드 입니다.


BSTR    bstrWide;
char*   pszAnsi;
int     nLength;

nLength = MultiByteToWideChar(CP_UTF8, 0, sUTF8Str, lstrlen(sUTF8Str) + 1, NULL, NULL);
bstrWide = SysAllocStringLen(NULL, nLength);
MultiByteToWideChar(CP_UTF8, 0, sUTF8Str, lstrlen(sUTF8Str) + 1, bstrWide, nLength);

nLength = WideCharToMultiByte(CP_ACP, 0, bstrWide, -1, NULL, 0, NULL, NULL);
pszAnsi = new char[nLength];
WideCharToMultiByte(CP_ACP, 0, bstrWide, -1, pszAnsi, nLength, NULL, NULL);
SysFreeString(bstrWide);

위 코드와 같이 변환을 하시면 마지막에 pszAnsi 포인터에 담긴 변수의 값을 시스템 내부에서 사용 하시면 됩니다.

코드의 처리는 먼저 UTF8로 들어온 문자열을 UniCode 형태로 변환을 합니다.
그다음 UniCode로 변환된 값을 다시 멀티 바이트로 변환 하는데 이떄 Ansi 코드 페이지를 이용하여 변환 하는 방식입니다.

그럼 ^^;

댓글 없음: