MFC字符Unicode轉UTF-8

unicode的環境下,寫中文到文件,會出現亂碼。

解決方法下面兩個函數。 

EncodeToUTF8  寫入的時候調用

UTF8ToEncode 讀取的時候調用

MultiByteToWideChar                           WideCharToMultiByte 實現原理就是這兩個函數。 不知到哪位仁兄寫的。

 

char* EncodeToUTF8(const char* mbcsStr)
{
 wchar_t*  wideStr;
 char*   utf8Str;
 int   charLen;

 charLen = MultiByteToWideChar(CP_UTF8, 0, mbcsStr, -1, NULL, 0);
 wideStr = (wchar_t*) malloc(sizeof(wchar_t)*charLen);
 MultiByteToWideChar(CP_ACP, 0, mbcsStr, -1, wideStr, charLen);

 charLen = WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, NULL, 0, NULL, NULL);

 utf8Str = (char*) malloc(charLen);

 WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, utf8Str, charLen, NULL, NULL);

 free(wideStr);
 return utf8Str;

}
char* UTF8ToEncode(const char* mbcsStr)
{
 wchar_t*  wideStr;
 char*   unicodeStr;
 int   charLen;

 charLen = MultiByteToWideChar(CP_UTF8, 0, mbcsStr, -1, NULL, 0);  
 wideStr = (wchar_t*) malloc(sizeof(wchar_t)*charLen);
 MultiByteToWideChar(CP_UTF8, 0, mbcsStr, -1, wideStr, charLen); 

 charLen =WideCharToMultiByte(CP_ACP, 0, wideStr, -1, NULL, 0, NULL, NULL); 
 unicodeStr = (char*)malloc(charLen);
    WideCharToMultiByte(CP_ACP, 0, wideStr, -1, unicodeStr, charLen, NULL, NULL); 

 free(wideStr);
 return unicodeStr;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章