环境为VC9,通过CHttpFile->ReadString读取HTML代码后,发现乱码,搜了很多帖子都说是要转成unicode,但是一直没有成功。如果将工程设置的字符集改成未设置或者多字节,就不会有乱码,但是可执行程序的外观就会与VC6的效果一样,没有VS版本生成的好看。另外,我的目的是想将HTML中的某个字段,如FileID附近的文本提取出来。这个网站的页面都是UTF-8编码。希望得到详细的解释,谢谢
解决方案 »
- 套接字编程每次只能接收4个数据,请问send和recv怎样把数据一次性发送和接收完整?
- 关于:Accept-Encoding: gzip,deflate 问题(500求助),解决后立即结贴!(100/500)
- 求:MFC+DX SHOW开发的视频采集程序,500分求,收到结帖!
- 在高级语言中怎样实现程序的合体?
- httptunnel问题!在线等小弟急用!
- 如何得到记录集内某一行内元素的实际大小, 比如得到该行存储的image字段图片的实际大小.
- 怎么切换视图??????????????????????????????????????????
- 更改硬盘分区图标
- 如何隐藏窗口,隐藏后还可以对它进行消息传递?请高人指教!谢了!
- 关于CHtmlView::Navigate2函数的使用疑问?
- 关于Access中时间格式的问题
- clistbox取消选中问题
UNICODE的程序获取UTF-8的网页后,会有乱码的,除非网页的文件当初保存为UTF-8编码。
你的项目如果是非UNICODE,获取UTF-8的网页后,这样转一下就可以了。void ConvertUtf8ToGBK(CString& strUtf8)
{
int len=MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, NULL,0);
unsigned short * wszGBK = new unsigned short[len+1];
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, (LPWSTR)wszGBK, len); len = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)wszGBK, -1, NULL, 0, NULL, NULL);
char *szGBK=new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte (CP_ACP, 0, (LPCWSTR)wszGBK, -1, szGBK, len, NULL,NULL); strUtf8 = szGBK;
delete[] szGBK;
delete[] wszGBK;
}