C#和HtmlAgilityPack编码问题

时间:2010-08-10 18:51:48

标签: c# encoding html-agility-pack

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论坛。他们很糟糕。

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

8 个答案:

答案 0 :(得分:25)

实际上该页面是用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());

答案 1 :(得分:12)

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

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

答案 2 :(得分:5)

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

希望它有所帮助:)

答案 3 :(得分:4)

UTF8对我来说不起作用,但是在设置了这样的编码之后,我试图抓取的大多数页面只是起作用了:

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

也许这对某人有帮助。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

这是我的解决方案

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

答案 7 :(得分:0)

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