Проблема с С# и HtmlAgilityPack
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. Они сосут.
P.S. Я не программист, но я работаю над проектом сообщества, и мне действительно нужно, чтобы этот код работал. Спасибо;}
Ответы
Ответ 1
На самом деле страница кодируется с помощью 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());
Ответ 2
У меня были аналогичные проблемы с кодировкой. Я исправил его в самой последней версии HtmlAgilityPack, добавив следующее к моей инициализации WebClient.
var htmlWeb = new HtmlWeb();
htmlWeb.OverrideEncoding = Encoding.UTF8;
var doc = htmlWeb.Load("www.alfa.lt");
Ответ 3
HtmlAgilityPack.HtmlDocument doc = new HtmlDocument();
StreamReader reader = new StreamReader(WebRequest.Create(YourUrl).GetResponse().GetResponseStream(), Encoding.Default); //put your encoding
doc.Load(reader);
надеюсь, что это поможет:)
Ответ 4
попробуйте изменить это на GodLikeHTML.Load(GodLikeClient.OpenRead("www.alfa.lt"), Encoding.GetEncoding(1257));
Ответ 5
UTF8 не работал у меня, но после установки такой кодировки большинство страниц, которые я пытался очистить, просто работало:
web.OverrideEncoding = Encoding.GetEncoding( "ISO-8859-1" );
Возможно, это может помочь кому-то.
Ответ 6
Это мое решение
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
если все эти сообщения не работают, просто используйте это: WebUtility.HtmlDecode("Your html text");