您的位置:首页 > 编程语言 > C#

c#抓取网页内容乱码的解决方案

2013-06-03 11:28 405 查看

    写过爬虫的同学都知道,这是个很常见的问题了,一般处理思路是: 使用HttpWebRequest发送请求,HttpWebResponse来接收,判断HttpWebResponse中”Content-Type”中的具体编码,再利用StreamReader
将信息流转为具体的编码就OK了。

下面提供第一种思路的一般方法:



 

这种方法基本上解决了大部分的编码问题。 之所以说基本上也是因为有一些网页,在HttpWebResponse 返回的头部中”Content-Type” 有时候不能正确的匹配到具体编码类型,这个时候就会读到乱码。

下面提供一个我使用的方法,这个方法可以正确的将页面转码:

  public static void getInnerHtmlAuto(string url)

        {

             try

            {

            WebClient wc = new WebClient();

            wc.Credentials = CredentialCache.DefaultCredentials;

            byte[] htmlBuffer = wc.DownloadData(url);

            Regex regex = new Regex("charset\\s*[\\W]?\\s*([\\w-]+)", RegexOptions.IgnoreCase);

            string content=Encoding.Default.GetString(htmlBuffer);

            Encoding encoding=Encoding.Default;

            if(regex.IsMatch(content))

            {

                encoding=Encoding.GetEncoding(regex.Match(content).Groups[1].Value.Trim());

                content=encoding.GetString(htmlBuffer);

            }

             outFileName = "C:\\log\\" + DateTime.Now.ToString().Replace(" ", "").Replace(":", "").Replace("-", "") + ".html";

            using (StreamWriter sw = new StreamWriter(outFileName))//将获取的内容写入文本

            {

                sw.Write(content);

            }

            Console.WriteLine(outFileName);  //输出保存后的文件名

             }

             catch (WebException webEx)

            {

                Console.WriteLine(webEx.Message.ToString());

            }

        }

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: