【问题标题】:C# and HtmlAgilityPack encoding problemC# 和 HtmlAgilityPack 编码问题
【发布时间】:2010-08-10 18:51:48
【问题描述】:
WebClient GodLikeClient = new WebClient();
HtmlAgilityPack.HtmlDocument GodLikeHTML = new HtmlAgilityPack.HtmlDocument();

GodLikeHTML.Load(GodLikeClient.OpenRead("www.alfa.lt");

所以此代码返回:“Skaitytojo klausimas psichologui: kas lemia homoseksualumÄ...? - Naujienų portalas Alfa.lt”而不是“Skaitytojo klausimas psichologui: kas lemia homoseksualumą? - Naujienų portalas Alfa.lt”。

此网页以 1257(波罗的海)编码,但 textBox1.Text = GodLikeHTML.DocumentNode.OuterHtml; 返回扭曲的文本 - 波罗的变音符号被转换为一些奇怪的几个字符长字符串:(

是的,我已经尝试过 HtmlAgilityPack 论坛。他们确实很烂。

附:我不是程序员,但我从事社区项目,我真的需要让这段代码正常工作。谢谢;}

【问题讨论】:

    标签: c# encoding html-agility-pack


    【解决方案1】:

    UTF8 对我不起作用,但在设置了这样的编码之后,我试图抓取的大多数页面都正常工作:

    web.OverrideEncoding = Encoding.GetEncoding("ISO-8859-1");
    

    也许它可以帮助某人。

    【讨论】:

    • 谢谢!很奇怪,我一直在调试我的程序来做 HtmWeb web = new HtmlWeb();然后 doc = web.Load(nextPageUrl);它已经停止工作。我已经测试了几天。为什么会停止工作?我有一个引发自定义异常的错误。但在那之后,即使从调试器重新启动我的应用程序几次,它还是给了我那个奇怪的错误。您的解决方案修复了我的问题。我正在寻找一种方法,但没有看到它。
    【解决方案2】:

    我遇到了类似的编码问题。我在最新版本的 HtmlAgilityPack 中通过将以下内容添加到我的 WebClient 初始化中来修复它。

    var htmlWeb = new HtmlWeb();
    htmlWeb.OverrideEncoding = Encoding.UTF8;
    var doc = htmlWeb.Load("www.alfa.lt");
    

    【讨论】:

    • 最佳答案(为什么只使用 HTMLAgilityPack 就可以使用 webclient
    【解决方案3】:

    如果所有这些帖子都不起作用,请使用:WebUtility.HtmlDecode("Your html text");

    【讨论】:

      【解决方案4】:

      这似乎消除了我对编码的任何了解:

      using System;
      using HtmlAgilityPack;
      using System.Net;
      using System.IO;
      
      
          class Program
          {
              static void Main(string[] args)
              {
                  Console.Write("Enter the url to pull html documents from: ");
      
                  string url = Console.ReadLine();
      
                  HtmlDocument document = new HtmlDocument();
      
                  var request = WebRequest.Create(url);
                  var response = request.GetResponse();
      
                  using (var reader = new StreamReader(response.GetResponseStream()))
                  {
                      document.LoadHtml(reader.ReadToEnd());
                  } 
              }
          }
      

      【讨论】:

        【解决方案5】:

        实际上页面是用 UTF-8 编码的。

        GodLikeHTML.Load(GodLikeClient.OpenRead("http://www.alfa.lt"), Encoding.UTF8);
        

        会起作用的。

        或者您可以使用我的SO answer 中的代码,它检测来自http 标头或元标记的编码,然后正确地重新编码。 (它还支持 gzip 以最小化您的下载)。

        使用下载类,您的代码将如下所示:

        HttpDownloader downloader = new HttpDownloader("http://www.alfa.lt",null,null);
        GodLikeHTML.LoadHtml(downloader.GetPage());
        

        【讨论】:

        • 是的,完成了这项工作 :D 哇,很简单,不是吗。谢谢!
        • 非常感谢,得到了 á 之类的疯狂字符,现在可以正常使用了
        • 这是原始问题的变量
        • @PierreLebon 我建议你看看 HttpWebRequest 类的可用属性,你会惊讶:)
        • 我对构造函数进行了重载并添加到获取页面请求中。但现在未来的读者将对如何做到这一点有一个可靠的提示。因为在与编码作斗争时,您可能会错过一些简单的事情。
        【解决方案6】:
         HtmlAgilityPack.HtmlDocument doc = new HtmlDocument(); 
         StreamReader reader = new StreamReader(WebRequest.Create(YourUrl).GetResponse().GetResponseStream(), Encoding.Default); //put your encoding            
         doc.Load(reader);
        

        希望对你有帮助:)

        【讨论】:

          【解决方案7】:

          尝试将其更改为GodLikeHTML.Load(GodLikeClient.OpenRead("www.alfa.lt"), Encoding.GetEncoding(1257));

          【讨论】:

          • 对不起,我误导了你——它是用 utf 编码的。不过感谢您的帮助。
          【解决方案8】:

          这是我的解决方案

           HttpWebRequest request =(HttpWebRequest)WebRequest.Create("http://www.sina.com.cn");
          HttpWebResponse response =(HttpWebResponse)request.GetResponse();
          long len = response.ContentLength;
          byte[] barr = new byte[len]; 
          response.GetResponseStream().Read(barr, 0, (int)len); 
          response.Close();
          string data = Encoding.UTF8.GetString(barr); 
          var encod = doc.DetectEncodingHtml(data);
          string convstr = Encoding.Unicode.GetString(Encoding.Convert(encod, Encoding.Unicode, barr));
          doc.LoadHtml(convstr);
          

          【讨论】:

            猜你喜欢
            • 2020-01-19
            • 1970-01-01
            • 1970-01-01
            • 2012-07-19
            • 1970-01-01
            • 2013-10-15
            • 1970-01-01
            • 2012-04-27
            • 2015-11-27
            相关资源
            最近更新 更多