1、Unicode、多字节、宽字节
一般MFC程序默认是unicode字符集的,字母和汉字都占两个字节。
而多字节字符集下,字母一个字节,汉字两个字节。
2、http请求中的乱码问题
一般服务端采用UTF-8编码,这种情况下如果本地用unicode字符集,会造成两边数据不匹配,发送到服务端的数据无法解析,服务端返回的数据也不能直接使用。
即使本地采用多字节字符集,也无法在http请求中发送中文(测试了英文可以)。
所以就需要手动处理数据,
发送到服务端前先从unicode转化为UTF-8,服务端返回的数据先从UTF-8转为unicode再显示在界面上
3、代码实现 MultiByteToWideChar和WideCharToMultiByte
unicode转utf-8
DWORD num = WideCharToMultiByte(CP_UTF8, 0, strPostData, -1, NULL, 0, NULL, NULL);//計算這個UNICODE实际由几个UTF-8字組成
cword = (char*)calloc(num, sizeof(char)); //申请空间
if (cword == NULL) //是否申请
{
free(cword);
}
memset(cword, 0, num*sizeof(char)); //初始化
WideCharToMultiByte(CP_UTF8, 0, strPostData, -1, cword, num, NULL, NULL);
printf("content长度为%d\n", strlen(cword));
utf-8转unicode
/*utf8转unicode*/
int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, strRawResponse.c_str(), -1, NULL, 0);
WCHAR *pUnicode = new WCHAR[unicodeLen + 1];
memset(pUnicode, 0, (unicodeLen + 1)*sizeof(wchar_t));
MultiByteToWideChar(CP_UTF8, 0, strRawResponse.c_str(), -1, pUnicode, unicodeLen);
strResponse = pUnicode;//最终响应结果
//TRACE(strResponse + L"");
delete[]pUnicode;
pUnicode = NULL;