解决Unicode用CInternetSession抓去网络数据ReadString中文显示乱码的问题
CInternetSession session(_T("HttpClient"));
CHttpFile* pfile = (CHttpFile *)session.OpenURL(url);
DWORD dwStatusCode;
pfile -> QueryInfoStatusCode(dwStatusCode);
if(dwStatusCode == HTTP_STATUS_OK)
{
TCHAR cbContent[512];
while (pfile->ReadString(cbContent, 512))
{
// 中文会显示乱码
AfxMessageBox(cbContent);
// 编码转换
int nBufferSize = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)cbContent, -1, NULL, 0);
wchar_t *pBuffer = new wchar_t[nBufferSize+1];
MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)cbContent, -1 , pBuffer, nBufferSize*sizeof(wchar_t));
// 显示正常
AfxMessageBox(pBuffer);
delete[] pBuffer;
}
}
因为代码选择了unicode字符集,所以这个ReadString参数需要用TCHAR数组保存读取的数据,但事实上ReadString获取的数据并没有转换为Unicode字符,而是直接存储到了TCHAR数字内,所以显示出现乱码,这里需要先将字节进行utf8编码转换