GBK to UTF8
<pre class="prism-highlight prism-language-cpp">std::string to_utf8(const std::string &gbk)
{
//gbk转unicode
int len = MultiByteToWideChar(CP_ACP, 0, gbk.c_str(), -1, NULL, 0);
wchar_t* strUnicode = new wchar_t[len];
wmemset(strUnicode, 0, len);
MultiByteToWideChar(CP_ACP, 0, gbk.c_str(), -1, strUnicode, len);
//unicode转UTF-8
len = WideCharToMultiByte(CP_UTF8, 0, strUnicode, -1, NULL, 0, NULL, NULL);
char* strUtf8 = new char[len+1];
strUtf8[len] = 0;
WideCharToMultiByte(CP_UTF8, 0, strUnicode, -1, strUtf8, len, NULL, NULL);
std::string strTemp(strUtf8);//此时的strTemp是UTF-8编码
delete[]strUnicode;
delete[]strUtf8;
strUnicode = NULL;
strUtf8 = NULL;
return strTemp;
}
UTF8 to GBK
<pre class="prism-highlight prism-language-cpp">std::string to_gbk(const std::string &utf8)
{
//UTF-8转unicode
int len = MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, NULL, 0);
wchar_t* strUnicode = new wchar_t[len];//len = 2
wmemset(strUnicode, 0, len);
MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, strUnicode, len);
//unicode转gbk
len = WideCharToMultiByte(CP_ACP, 0, strUnicode, -1, NULL, 0, NULL, NULL);
char* strGbk = new char[len+1];//len=3 本来为2,但是char*后面自动加上了\0
memset(strGbk, 0, len);
WideCharToMultiByte(CP_ACP, 0, strUnicode, -1, strGbk, len, NULL, NULL);
strGbk[len] = 0;
std::string strTemp(strGbk);//此时的strTemp是GBK编码
delete[]strUnicode;
delete[]strGbk;
strUnicode = NULL;
strGbk = NULL;
return strTemp;
}