部分utf-8编码的页面中文乱码

farcall 2014-02-12 05:11:10
利用winHttp 获得了网页源码之后
编码为gbk(如sina.com.cn)和大部分的utf-8(如csdn.net)的网页都能解析成功


但是个别的utf-8编码的网页中文解析乱码
比如http://www.baidu.com/



下面是我在获得了baidu返回的源码之后做的两个截图
1:vs中截图

2:浏览器中截图
...全文
304 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
farcall 2014-02-18
  • 打赏
  • 举报
回复
引用 5 楼 oyljerry 的回复:
unicode工程没有处理对utf8吧
是的 已经处理完成 谢谢您的帮助
oyljerry 2014-02-16
  • 打赏
  • 举报
回复
unicode工程没有处理对utf8吧
farcall 2014-02-15
  • 打赏
  • 举报
回复
引用 3 楼 xiaoc1026 的回复:

int CUtilityEx::ConvertUtf8ToGBK(char* pChangeStr,int nLength)
{
	//int nLen = MultiByteToWideChar( CP_UTF8, 0, pChangeStr, -1, NULL, NULL );//得到UTF8编码的字符串长度
	int nLen = nLength*2;

	LPWSTR lpwsz = new WCHAR[nLen]; 
	if( lpwsz == NULL)
	{
		return 0;
	}
	MultiByteToWideChar( CP_UTF8, 0, pChangeStr, -1, lpwsz, nLen );//转换的结果是UCS2格式

	//	int nLen1 = WideCharToMultiByte( CP_ACP, 0, lpwsz, nLen, NULL, NULL, NULL, NULL ); 

	//	LPSTR lpsz = new CHAR[nLen1]; 
	//WideCharToMultiByte( CP_ACP, 0, lpwsz, nLen, lpsz, nLen1, NULL, NULL );//转换完毕
	int nLen1 =	WideCharToMultiByte( CP_ACP, 0, lpwsz, -1, pChangeStr, nLen, NULL, NULL );//转换完毕

	delete [] lpwsz; 
	//delete [] lpsz;

	*(pChangeStr + nLen1) = '\0';

	return nLen1;
}
用这个函数转换看看。
由于我的工程师UNICODE格式 所以利用ConvertUtf8ToGBK转换之后部分汉字转换成功,还有一些汉字会转换成“?”符号 等 现在我讲工程换成ANSI格式,可以正常解析所有网页了 剩下的工作就是要将ANSI工程转换成UNICODE工程
见习学术士 2014-02-14
  • 打赏
  • 举报
回复

int CUtilityEx::ConvertUtf8ToGBK(char* pChangeStr,int nLength)
{
	//int nLen = MultiByteToWideChar( CP_UTF8, 0, pChangeStr, -1, NULL, NULL );//得到UTF8编码的字符串长度
	int nLen = nLength*2;

	LPWSTR lpwsz = new WCHAR[nLen]; 
	if( lpwsz == NULL)
	{
		return 0;
	}
	MultiByteToWideChar( CP_UTF8, 0, pChangeStr, -1, lpwsz, nLen );//转换的结果是UCS2格式

	//	int nLen1 = WideCharToMultiByte( CP_ACP, 0, lpwsz, nLen, NULL, NULL, NULL, NULL ); 

	//	LPSTR lpsz = new CHAR[nLen1]; 
	//WideCharToMultiByte( CP_ACP, 0, lpwsz, nLen, lpsz, nLen1, NULL, NULL );//转换完毕
	int nLen1 =	WideCharToMultiByte( CP_ACP, 0, lpwsz, -1, pChangeStr, nLen, NULL, NULL );//转换完毕

	delete [] lpwsz; 
	//delete [] lpsz;

	*(pChangeStr + nLen1) = '\0';

	return nLen1;
}
用这个函数转换看看。
farcall 2014-02-12
  • 打赏
  • 举报
回复
引用 1 楼 xiaoc1026 的回复:
图片太小看不清楚,首先检查HTTP头是否采用 GZIP压缩,再检查编码,你接收的数据长度和HTTP头里面的长度是否一致。
您好 要测试的网站就是www.baidu.com 没有采用gzip压缩 编码为utf-8 接受到的数据和http头返回的长度一致 我考虑还是编码转换的问题 却又不清楚怎么转换 因为我用HttpAnalyzerStdV5来抓取我程序的数据包 内容都是一样的 但是HttpAnalyzerStdV5可以解析成功 但不知道他是怎么解析的
见习学术士 2014-02-12
  • 打赏
  • 举报
回复
图片太小看不清楚,首先检查HTTP头是否采用 GZIP压缩,再检查编码,你接收的数据长度和HTTP头里面的长度是否一致。

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧