大家看看下面的代码,有的页面读取后显示出来的是乱码,不知各位有什么好的方法解决。
有般就是GB2312和UTF-8这两者无法转换。public string getPageInfo(string pageUrl)
{
string pageInfo="";
WebRequest myReq=WebRequest.Create(pageUrl);
WebResponse myRes=myReq.GetResponse();
Stream resStream=myRes.GetResponseStream();
StreamReader sr=new StreamReader(resStream,Encoding.Default);
pageInfo=(sr.ReadToEnd()).ToString();
myRes.Close();
return pageInfo;
}
StreamReader sr=new StreamReader(resStream,Encoding.UTF-8);
这样读就是了
2.若没有Content-Encoding,则一般在网页中会有
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
之类,问题在于在未知编码的情况下无法正确将byte[]转为String解决办法是针对每种编码都用byte[]过滤。例如,检查是否为utf-8:
byte[] data = ... // read from socket
byte[] encoding = "charset=utf-8".getBytes("UTF-8")
if(contains(data, encoding)) {
// it's utf-8 encoding:
String s = new String(data, "UTF-8"));
}
else if // try gb2312
...
else if // try unicode
...
...其中boolean contains(byte[], byte[])用于在一个byte[]中搜索另一个byte[],忽略大小写
WebResponse myRes=myReq.GetResponse();
Stream resStream=myRes.GetResponseStream();
Encoding en=Encoding.UTF8;
if(myRes.Headers["Transfer-Encoding"]!=null){
en=Encoding.GetEncoding(myRes.Headers["Transfer-Encoding"]);
}
else if(myRes.Headers["Content-Type"]!=null){
string charSet=myRes.Headers["Content-Type"].ToLower();
Regex reg=new Regex(@"charset=(\S*)",RegexOptions.IgnoreCase);
charSet=reg.Match(charSet).Groups[1].Value.ToLower();
//这儿直接getEncoding应该改为switch分枝更好
en=Encoding.GetEncoding(charSet);
}
StreamReader sr=new StreamReader(resStream,en);
string pageInfo=(sr.ReadToEnd()).ToString();
myRes.Close();
return pageInfo;