大家看看下面的代码,有的页面读取后显示出来的是乱码,不知各位有什么好的方法解决。
有般就是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;
}

解决方案 »

  1.   

    先读meta获知编码,然后
    StreamReader sr=new StreamReader(resStream,Encoding.UTF-8);
    这样读就是了
      

  2.   

    http://community.csdn.net/Expert/TopicView3.asp?id=49815761.检查http header中的Content-Encoding,若有,即获得页面编码
    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[],忽略大小写
      

  3.   

    HttpWebRequest myReq =(HttpWebRequest)WebRequest.Create("http://www.contoso.com/");
    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;