2020년 4월 4일 토요일

MFC Ansi 문자열 UTF8 문자열 변환

MFC는 오래된 플랫폼이죠.

그래도 이걸로 먹고 산지가 오래 되어서 ^^
요즘들어 웹이랑 데이터를 주고 받는 일이 많다 보니 웹에서는 UTF8을 기본 문자 코드로 쓰기 때문에 MFC 이전 프로젝트를 쓰시는 한글 같은것을 주고 받을때 문제가 생기기 마련입니다.​

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


int  nLength, nLength2;
BSTR bstrCode; 
char* pszUTFCode = NULL;

nLength = MultiByteToWideChar(CP_ACP, 0, sAnsiStr, lstrlen(sAnsiStr), NULL, NULL); 
bstrCode = SysAllocStringLen(NULL, nLength); 
MultiByteToWideChar(CP_ACP, 0, sAnsiStr, lstrlen(sAnsiStr), bstrCode, nLength);

nLength2 = WideCharToMultiByte(CP_UTF8, 0, bstrCode, -1, pszUTFCode, 0, NULL, NULL); 
pszUTFCode = (char*)malloc(nLength2+1); 
WideCharToMultiByte(CP_UTF8, 0, bstrCode, -1, pszUTFCode, nLength2, NULL, NULL);  

위 코드와 같이 변환을 하시면 마지막에 pszUTF8 포인터에 담긴 변수의 값을 웹쪽에 전달을 하면 UTF8 형태의 문자열로 전달할수 있습니다.

코드의 처리는 먼저 멀티바이트 Ansi 코드를 UniCode로 변환을 합니다.
그다음 UniCode로 변환된 값을 다시 멀티 바이트로 변환 하는데 이때 UTF8 코드 페이지를 이용하여 변환 하는 방식 입니다.

그럼 ^^;

댓글 없음: