C#和HtmlAgilityPack编码问题

WebClient GodLikeClient = new WebClient(); HtmlAgilityPack.HtmlDocument GodLikeHTML = new HtmlAgilityPack.HtmlDocument(); GodLikeHTML.Load(GodLikeClient.OpenRead("www.alfa.lt"); 

所以这段代码回复:“Skaitytojo klausimas psichologui:kaslemiahomoseksualumÄ…? – NaujienųportalasAlfa.lt”而不是“Skaitytojo klausimas psichologui:kaslemiahomoseksualumą? – NaujienųportalasAlfa.lt”。

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

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

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

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

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

将工作。

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

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

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

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

 var htmlWeb = new HtmlWeb(); htmlWeb.OverrideEncoding = Encoding.UTF8; var doc = htmlWeb.Load("www.alfa.lt"); 
  HtmlAgilityPack.HtmlDocument doc = new HtmlDocument(); StreamReader reader = new StreamReader(WebRequest.Create(YourUrl).GetResponse().GetResponseStream(), Encoding.Default); //put your encoding doc.Load(reader); 

希望能帮助到你 :)

UTF8对我来说不起作用,但是在设置了这样的编码之后,我试图刮掉的大多数页面都工作得很好:

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

也许它可能对某人有帮助。

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

这是我的解决方案

  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); 

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