C#和HtmlAgilityPack编码问题

Aug*_*ust 23 c# encoding html-agility-pack

WebClient GodLikeClient = new WebClient();
HtmlAgilityPack.HtmlDocument GodLikeHTML = new HtmlAgilityPack.HtmlDocument();

GodLikeHTML.Load(GodLikeClient.OpenRead("www.alfa.lt");
Run Code Online (Sandbox Code Playgroud)

所以这段代码返回:"Skaitytojo klausimas psichologui:kaslemiahomoseksualumÄ...? - NaujienųportalasAlfa.lt"而不是"Skaitytojo klausimas psichologui:kaslemiahomoseksualumą? - NaujienųportalasAlfa.lt".

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

是的,我已经尝试过HtmlAgilityPack论坛了.他们很糟糕.

PS我不是程序员,但是我在社区项目上工作,我真的需要让这段代码工作.谢谢 ;}

Mik*_*son 25

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

GodLikeHTML.Load(GodLikeClient.OpenRead("http://www.alfa.lt"), Encoding.UTF8);
Run Code Online (Sandbox Code Playgroud)

将工作.

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

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

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

  • 非常感谢,得到像á或其他什么的疯狂角色,现在它工作得很好 (2认同)
  • 这是原始问题的变量 (2认同)

cra*_*tad 12

我有类似的编码问题.我通过在WebClient初始化中添加以下内容,在最新版本的HtmlAgilityPack中修复它.

var htmlWeb = new HtmlWeb();
htmlWeb.OverrideEncoding = Encoding.UTF8;
var doc = htmlWeb.Load("www.alfa.lt");
Run Code Online (Sandbox Code Playgroud)

  • 最佳答案(为什么只使用 HTMLAgilityPack 就可以使用 webclient (2认同)

Sag*_*fek 5

 HtmlAgilityPack.HtmlDocument doc = new HtmlDocument(); 
 StreamReader reader = new StreamReader(WebRequest.Create(YourUrl).GetResponse().GetResponseStream(), Encoding.Default); //put your encoding            
 doc.Load(reader);
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你 :)


Tys*_*Tys 5

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

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

也许它可以帮助某人。