为什么charset=gb2312时,CHtmlView::GetSource()也会Get出utf_8乱码?
我用CHtmlView::GetSource()取网页的html,基本上没什么问题。但有时候碰到一两个网页很奇怪,Get出的是像charset=utf_8那样的汉字乱码,但明明meta标签里写明是gb2312,为什么会这样?难道是网页的制作者作过什么加密处理吗?但IE的“源文件”菜单却能看到正确的html.
比如这个页:
http://www.qu114.com/NN/1/1/888293.html
用IE的“源文件”菜单可看到其html是这样的(篇幅所限,只摘录开头部分):
---------------网页正确html----------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN " "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns= "http://www.w3.org/1999/xhtml ">
<head id= "Head1 ">
<title> 房屋出租|南宁个人出租|南宁分类信息|去114城市分类信息 </title>
<meta http-equiv= "Content-Type " content= "text/html; charset=gb2312 " />
<meta content= "房屋出租,南宁个人出租,南宁分类信息,去114城市分类信息 " name= "Keywords " />
<meta content= "南宁权威的城市分类信息平台,覆盖南宁各个区县,为在南宁寻找和提供个人出租的朋友提供全面信息查询和免费发布服务. " name= "Description " />
<link href= "http://pic.qu114.com/style/list.css " type= "text/css " rel= "stylesheet " />
</head>
<body onmouseout= "window.status= '客户服务电话:020-85609187; 客服QQ: 228420114, 228430114 ';return true ">
<form name= "form1 " method= "post " id= "form1 ">
<div>
......
......
---------------END of 网页正确html----------------------
但我用CHtmlView::GetSource()得到的字串是这样的:
---------------GetSource()得到的字串--------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN " "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns= "http://www.w3.org/1999/xhtml ">
<head id= "Head1 ">
<title> 鎴垮眿鍑虹|鍗楀畞涓汉鍑虹|鍗楀畞鍒嗙被淇℃伅|鍘?14鍩庡競鍒嗙被淇℃伅 </title>
<meta http-equiv= "Content-Type " content= "text/html; charset=gb2312 " />
<meta content= "鎴垮眿鍑虹,鍗楀畞涓汉鍑虹,鍗楀畞鍒嗙被淇℃伅,鍘?14鍩庡競鍒嗙被淇℃伅 " name= "Keywords " />
<meta content= "鍗楀畞鏉冨▉鐨勫煄甯傚垎绫讳俊鎭钩鍙?瑕嗙洊鍗楀畞鍚勪釜鍖哄幙,涓哄湪鍗楀畞瀵绘壘鍜屾彁渚涗釜浜哄嚭绉熺殑鏈嬪弸鎻愪緵鍏ㄩ潰淇℃伅鏌ヨ鍜屽厤璐瑰彂甯冩湇鍔? " name= "Description " />
<link href= "http://pic.qu114.com/style/list.css " type= "text/css " rel= "stylesheet " />
</head>
<body onmouseout= "window.status= '瀹㈡埛鏈嶅姟鐢佃瘽:020-85609187; 瀹㈡湇QQ: 228420114, 228430114 ';return true ">
<form name= "form1 " method= "post " id= "form1 ">
<div>
......
......
------------end of GetSource()得到的字串---------
上面可以看到,字串是一些utf_8的编码,如果我对上面字串强行进行utf_8到gb2312的转换,就会转出正确的字串。但很奇怪,html里面的meta标签里明明是写着“charset=gb2312”,整个html都没有找到utf_8的字样。
为什么会这样?
[解决办法]
那就是因为该网页的真实编码方式其实就是utf-8吧 :) 是不是由那个页面所采用的编辑工具引起的 :)