Проблема с C # и HtmlAgilityPack

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: kas lemia homoseksualumû â € |? - Naujienà ... ³³ portalas Alfa.lt »вместо« Skaitytojo klausimas psichologui: kas lemia homoseksualumÄ ...? - Naujienų portalas Alfa.lt ».

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

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

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

Принятый ответ

На самом деле страница кодируется UTF-8.

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

будет работать.

Или вы можете использовать код в моем ответе SO, который определяет кодировку из заголовков http или метатег, en правильно кодирует. (Он также поддерживает gzip, чтобы минимизировать загрузку).

С классом загрузки ваш код будет выглядеть так:

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

Популярные ответы

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

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


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему