C++ Unicode與UTF_8 編碼轉換
阿新 • • 發佈:2018-12-26
void UTF_8ToUnicode(wchar_t* pOut,char *pText){
char* uchar = (char *)pOut;
uchar[1] = ((pText[0] & 0x0F) << 4) + ((pText[1] >> 2) & 0x0F);
uchar[0] = ((pText[1] & 0x03) << 6) + (pText[2] & 0x3F);
}
void UnicodeToUTF_8(char* pOut,wchar_t* pText){
// 注意 WCHAR高低字的順序,低位元組在前,高位元組在後
char* pchar = (char *)pText;
pOut[0] = (0xE0 | ((pchar[1] & 0xF0) >> 4));
pOut[1] = (0x80 | ((pchar[1] & 0x0F) << 2)) + ((pchar[0] & 0xC0) >> 6);
pOut[2] = (0x80 | (pchar[0] & 0x3F));
}
出處:
以上程式碼只能轉換第一個寬字元,要轉換全部可以加一個迴圈,如下:
string UnicodeToUTF_8(wchar_t* pText)
{
// 注意 WCHAR高低字的順序,低位元組在前,高位元組在後
string str;
char* pOut = new char[4];
memset(pOut, 0, 4);
for (int i = 0; i < wcslen(pText); i ++) {
char* pchar = (char *)&pText[i];
pOut[0] = (0xE0 | ((pchar[1] & 0xF0) >> 4));
pOut[1] = (0x80 | ((pchar[1] & 0x0F) << 2)) +((pchar[0] & 0xC0 ) >> 6);
pOut[2] = (0x80 | (pchar[0] & 0x3F));
str += pOut;
}
return str;
}
還可以使用 iconv庫。