C++字符转码

来源:互联网 发布:轩辕剑入灵进阶数据 编辑:程序博客网 时间:2024/05/25 19:58
wchar_t* U8ToUnicode(char* szU8){    //UTF8 to Unicode    //由于中文直接复制过来会成乱码,编译器有时会报错,故采用16进制形式    //char* szU8 = "abcd1234\xe4\xbd\xa0\xe6\x88\x91\xe4\xbb\x96\x00";    //预转换,得到所需空间的大小    int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), NULL, 0);    //分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间    wchar_t* wszString = new wchar_t[wcsLen + 1];    //转换    ::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), wszString, wcsLen);    //最后加上'\0'    wszString[wcsLen] = '\0';    return wszString;}char* UnicodeToU8(wchar_t* szUnicode){    // unicode to UTF8    //wchar_t* wszString = L"abcd1234你我他";    //预转换,得到所需空间的大小,这次用的函数和上面名字相反    int u8Len = ::WideCharToMultiByte(CP_UTF8, NULL, szUnicode, wcslen(szUnicode), NULL, 0, NULL, NULL);    //同上,分配空间要给'\0'留个空间    //UTF8虽然是Unicode的压缩形式,但也是多字节字符串,所以可以以char的形式保存    char* szU8 = new char[u8Len + 1];    //转换    //unicode版对应的strlen是wcslen    ::WideCharToMultiByte(CP_UTF8, NULL, szUnicode, wcslen(szUnicode), szU8, u8Len, NULL, NULL);    //最后加上'\0'    szU8[u8Len] = '\0';    return szU8;}char* UnicodeToAnsi(wchar_t* szUnicode){    // unicode to ansi    //wchar_t* wszString = L"abcd1234你我他";    //预转换,得到所需空间的大小,这次用的函数和上面名字相反    int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, szUnicode, wcslen(szUnicode), NULL, 0, NULL, NULL);    //同上,分配空间要给'\0'留个空间    char* szAnsi = new char[ansiLen + 1];    //转换    //unicode版对应的strlen是wcslen    ::WideCharToMultiByte(CP_ACP, NULL, szUnicode, wcslen(szUnicode), szAnsi, ansiLen, NULL, NULL);    //最后加上'\0'    szAnsi[ansiLen] = '\0';    return szAnsi;}wchar_t* AnsiToUnicode(char* szAnsi){    // ansi to unicode    //char* szAnsi = "abcd1234你我他";    //预转换,得到所需空间的大小    int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), NULL, 0);    //分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间    wchar_t* wszString = new wchar_t[wcsLen + 1];    //转换    ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), wszString, wcsLen);    //最后加上'\0'    wszString[wcsLen] = '\0';    return wszString;}

 

0 0
原创粉丝点击