码迷,mamicode.com
首页 > 编程语言 > 详细

C++字符转码

时间:2014-10-12 22:03:58      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   ar   sp   div   art   log   bs   

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;
}

 

C++字符转码

标签:style   blog   color   ar   sp   div   art   log   bs   

原文地址:http://www.cnblogs.com/cjingzm/p/4021084.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!