C++ Unicode与UTF_8 编码转换

来源:互联网 发布:手机淘宝中评可以改吗 编辑:程序博客网 时间:2024/05/17 11:33
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));}

出处:

http://www.360doc.com/content/13/0114/20/7023119_260175036.shtml

以上代码只能转换第一个宽字符,要转换全部可以加一个循环,如下:

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库。

0 0