我抓取的网页是:http://www.newegg.com.cn 网页的编码是gb2312.我用的系统是英文系统,无论怎么改抓取的源代码都是乱码,中文系统是没问题。下面是我写的Code:
 WebResponse res = req.GetResponse();
 Stream resStream = res.GetResponseStream();
 StreamReader sr = new StreamReader(resStream, Encoding.UTF8);  //试过用default,utf-8抓取的网页源代码都是乱码
 string result= sr.ReadToEnd();
返回的result是乱码(英文系统)我请教各位大虾的是在编程的时候怎样抓取网页代码是正常的。不能用以下方法:在系统安装中文补丁。(代码适应系统,非系统适应代码)。我曾找解码的方法,没试成功,可能方法有误。哪位大虾请帮帮忙。急急急!!
                

解决方案 »

  1.   


    我确认那个网站http://www.newegg.com.cn 的编码是 gb2312,可是我的系统是英文系统,只能支持utf8的格式才正确显示,抓取回来的源代码,中文都是乱码,这过程中该怎样转换?谢谢。
      

  2.   

    Encoding.UTF8这个不能随便乱写呀,要检测编码的。而且很多网站HTML里声明的编码和发送的编码不一致……这个只能靠词频了,IE有个IMultiLanguage的API,FireFox和Chrome的实现都可以自己去翻源代码
      

  3.   

    string content;
                string url = "http://www.newegg.com.cn";
                bool success = getWebContent(url, "post", "gbk", out content);
                if (success)
                {
                    Response.Write(content);
                }
    ------------------------------------------
    public static bool getWebContent(string strURL, string method, string encodingType, out string buf)
            {
                buf = "";
                try
                {
                    HttpWebRequest request = null;
                    request = (HttpWebRequest)WebRequest.Create(strURL);
                    request.Method = method; //请求方式
                    request.ContentType = "text/html"; //内容类型                string paraUrlCoded = System.Web.HttpUtility.UrlEncode(""); //参数经过URL编码
                    byte[] payload;
                    payload = System.Text.Encoding.GetEncoding(encodingType).GetBytes(paraUrlCoded); //将URL编码后的字符串转化为字节                 request.ContentLength = payload.Length; //设置请求的ContentLength                Stream writer = request.GetRequestStream(); //获得请求流
                    writer.Write(payload, 0, payload.Length); //将请求参数写入流
                    writer.Close(); //关闭请求流                HttpWebResponse response;
                    response = (HttpWebResponse)request.GetResponse(); //获得响应流                Stream s;
                    s = response.GetResponseStream();                StreamReader objReader = new StreamReader(s, System.Text.Encoding.GetEncoding(encodingType));                string HTML = "";
                    string sLine = "";
                    int i = 0;                while (sLine != null)
                    {
                        i++;
                        sLine = objReader.ReadLine();
                        if (sLine != null)
                        {
                            HTML += sLine;
                        }
                    }
                    buf = HTML;
                    if (HTML == "")
                    {
                        return false;
                    }
                    else
                    {
                        return true;
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("页面读取异常:" + e.Message);
                    return false;
                }
            }
    正常 已测试!
      

  4.   

    StreamReader sr = new StreamReader(resStream, Encoding.GetEncoding("gb2312"));
    这样?
      

  5.   

    StreamReader reader = new StreamReader(WebRequest.Create(requestUri).GetResponse().GetResponseStream(), Encoding.Default);
      

  6.   

    Uri requestUri = new Uri("http://www.newegg.com.cn);
      

  7.   

    gb2312 你用utf8请求当然乱码了试试 Encoding.GetEncoding("gbk")