编码转换函数:
string AnsiToUnicodeToGBK(const std::string& strOriginal)
{
int len = MultiByteToWideChar(CP_UTF8, 0, strOriginal.c_str(), -1, NULL, 0);
//为unicode申请两个字节的宽字符空间,因为unsigned short 大小刚好是两个字节,所以用unsigned short 型的指针最合适
unsigned short * wszUTF8 = new unsigned short[len + 1];
memset(wszUTF8, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0,LPCSTR(strOriginal.c_str()), -1, LPWSTR(wszUTF8), len);
len = WideCharToMultiByte(CP_ACP, 0,LPCWSTR(wszUTF8), -1, NULL, 0, NULL, NULL);
char *szGBK = new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte(CP_ACP,0, LPCWSTR(wszUTF8), -1, szGBK, len, NULL, NULL);
//strUTF8 = szGBK;
std::string strTemp(szGBK);
delete[]szGBK;
delete[]wszUTF8;
return strTemp;
}