2010-08-10 3 views
18
WebClient GodLikeClient = new WebClient(); 
HtmlAgilityPack.HtmlDocument GodLikeHTML = new HtmlAgilityPack.HtmlDocument(); 

GodLikeHTML.Load(GodLikeClient.OpenRead("www.alfa.lt"); 

Так что этот код возвращает ««вопросы психолога: какие причины гомосексуализма ... - Naujienų портал Alfa.lt? Вместо "читателей читателей» вопросы психолога: какие причины гомосексуализма - Новости портала Alfa.lt? ».C# и проблема кодирования HtmlAgilityPack

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

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

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

ответ

21

На самом деле страница кодируется 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()); 
+0

Да, что «увеличение задания: D Wow, довольно просто, не правда ли. Спасибо! – August

+2

большое спасибо, получили сумасшедшие символы, такие как или любой другой, теперь он работает нормально –

+0

Dehell является GodLikeHTML? Является ли это синонимом или я действительно ищу класс с таким именем? – helmesjo

1

, которые пытаются изменить GodLikeHTML.Load(GodLikeClient.OpenRead("www.alfa.lt"), Encoding.GetEncoding(1257));

+0

извините, у меня Misguided вы - это было закодировано в UTF. Спасибо за вашу помощь. – August

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

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

11

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

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

Лучший ответ (зачем использовать webclient, когда вы можете сделать это, используя только HTMLAgilityPack – a1204773

1

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

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

Возможно, это могло бы помочь кому-то.

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

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

Смежные вопросы