日期:2014-05-17  浏览次数:20452 次

采集HTML源码 ---乱码
大家好: 想试试做一个采集HTML中的内容 ,但有一些网站的采集出现乱码。
虽然说如果第一个采集有问题 就换一个编码,但还是有问题
以下是代码
C# code

     public static  string AutoHtml(string url)
      {
          if (url.ToLower().IndexOf("http://")==-1)
          {
              url = "http://" + url;
          }
          WebClient myWebClient = new WebClient();
          myWebClient.Credentials = CredentialCache.DefaultCredentials;
          byte[] myDataBuffer = null;
          try
          {
             myDataBuffer=myWebClient.DownloadData(url);
          }
          catch { return null; }
         //
          string dd = System.Text.Encoding.UTF8.GetString(myDataBuffer);
         //
         
          string strWebData = Encoding.Default.GetString(myDataBuffer);
         // strWebData = " <title></title><meta  charset=gb2312 />";
         // string strRegex = @"charset=['""]?(.*?)['""]?\r\n/>";
          //Match charSetMatchs = Regex.Match(strWebData, strRegex, RegexOptions.IgnoreCase); 
          //Regex r = new Regex(strRegex, RegexOptions.IgnoreCase);
          //MatchCollection m = r.Matches(strWebData);
          //获取网页字符编码描述信息
          Match charSetMatch = Regex.Match(strWebData, @"charset=['""]?(.*?)['""]?\s?/>", RegexOptions.IgnoreCase); 
          string webCharSet = charSetMatch.Groups[1].Value;
          if (string.IsNullOrEmpty(webCharSet))
          {
              webCharSet = "utf-8";
          }   //换一个编码
          strWebData = Encoding.GetEncoding(webCharSet).GetString(myDataBuffer);
          return strWebData;
      }


采集 www.xiaomi.com的时候出现乱码。。。应该如何 解决,原因是?

------解决方案--------------------
Encoding encoding = Encoding.GetEncoding(webBrowser.Document.Encoding);
StreamReader stream = new StreamReader(webBrowser.DocumentStream, encoding);
File.WriteAllText(@"C:\mzwu.txt", stream.ReadToEnd(), Encoding.Unicode);
MessageBox.Show(DateTime.Now.ToString() + ": 页面内容获取完成! ");
------解决方案--------------------
是不是有些站点的编码和你不同,就是有些必须是gb2312有些是utf-8啊 ,具体的不了解啊,帮顶
------解决方案--------------------
Encoding.Default.GetString(myDataBuffer);
这种编码的时候最好别用默认的,指定具体编码下试试