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

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

Ansi를 UTF-8로 변환

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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;
}
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; }
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로 변환

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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;
}
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; }
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;
}

Comments

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

  1. 쩡2 아바타

    ㅠㅠ진짜감사합니다…이틀내내 해메고 힘들었는데…이거한번에해결됬어요…

    1. Linsoo 아바타
      Linsoo

      네…

  2. dslee 아바타
    dslee

    위 함수 SysFreeString 빠졌네요. 메모리 누수..

    1. Linsoo 아바타

      아 그러네요. 수정했습니다.

  3. axd 아바타

    c로 컴파일하니 안되는데 어떻게할까요,,

    1. Linsoo 아바타

      글쎄요…

  4. SM9 아바타

    어이쿠 감사합니다~

    1. Linsoo 아바타

  5. 하카세 아바타
    하카세

    예전 글이지만 감사합니다~

    1. Linsoo 아바타

      넵~

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다