Проблема кодирования в C # и HtmlAgilityPack - PullRequest
23 голосов
/ 10 августа 2010
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.l».

Эта веб-страница закодирована в 1257 (baltic), но textBox1.Text = GodLikeHTML.DocumentNode.OuterHtml; возвращает искаженный текст - диалектика baltic преобразуется в несколько странных строк длиной в несколько символов :(

И да, я пробовал HtmlAgilityPackфорумы. Они отстой.

PS Я не программист, но я работаю над проектом сообщества, и мне действительно нужно, чтобы этот код работал. Спасибо;}

Ответы [ 7 ]

25 голосов
/ 10 августа 2010

На самом деле страница кодируется с помощью 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());
12 голосов
/ 22 октября 2012

У меня были похожие проблемы с кодировкой. Я исправил это в самой последней версии HtmlAgilityPack, добавив следующее в мою инициализацию WebClient.

var htmlWeb = new HtmlWeb();
htmlWeb.OverrideEncoding = Encoding.UTF8;
var doc = htmlWeb.Load("www.alfa.lt");
5 голосов
/ 02 октября 2011
 HtmlAgilityPack.HtmlDocument doc = new HtmlDocument(); 
 StreamReader reader = new StreamReader(WebRequest.Create(YourUrl).GetResponse().GetResponseStream(), Encoding.Default); //put your encoding            
 doc.Load(reader);

надеюсь, это поможет:)

4 голосов
/ 12 июня 2013

UTF8 у меня не сработал, но после установки кодировки, подобной этой, большинство страниц, которые я пытался очистить, работали просто хорошо:

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

Возможно, это может кому-то помочь.

1 голос
/ 10 августа 2010

попробуйте изменить это на GodLikeHTML.Load(GodLikeClient.OpenRead("www.alfa.lt"), Encoding.GetEncoding(1257));

0 голосов
/ 07 февраля 2016

, если все эти посты не работают, просто используйте это: WebUtility.HtmlDecode("Your html text");

0 голосов
/ 07 апреля 2015

Это моё решение

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