C++에서 UTF8, Unicode, Ansi 문자열 변환..

이거 할때마다 인터넷 검색하는거 귀찮아서 여기 기록해놓음

Ansi를 UTF-8로 변환

char* ANSIToUTF8(const char * pszCode){
    int     nLength, nLength2;
    BSTR    bstrCode; 
    char*   pszUTFCode = NULL;
 
    nLength = MultiByteToWideChar(CP_ACP, 0, pszCode, lstrlen(pszCode), NULL, NULL); 
    bstrCode = SysAllocStringLen(NULL, nLength); 
    MultiByteToWideChar(CP_ACP, 0, pszCode, lstrlen(pszCode), 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); 
	SysFreeString(bstrWide);
	
    return pszUTFCode;
}

UTF-8을 ANSI로 변환

char* UTF8ToANSI(const char *pszCode){
    BSTR    bstrWide;
    char*   pszAnsi;
    int     nLength;
 
    nLength = MultiByteToWideChar(CP_UTF8, 0, pszCode, lstrlen(pszCode) + 1, NULL, NULL);
    bstrWide = SysAllocStringLen(NULL, nLength);
 
    MultiByteToWideChar(CP_UTF8, 0, pszCode, lstrlen(pszCode) + 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);
 
    return pszAnsi;
}
크리에이티브 커먼즈 라이선스 Linsoo 의 저작물인 이 저작물은(는) 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

“C++에서 UTF8, Unicode, Ansi 문자열 변환..”에 대한 10개의 댓글

댓글 남기기

이메일은 공개되지 않습니다.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.