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

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

Więc ten kod zwraca "„psycholog pytania: co powoduje homoseksualizm ... - Naujienų portal Alfa.lt? Zamiast "czytelników czytelników" psycholog pytania: co powoduje homoseksualizm - News Portal Alfa.lt? "C# i HtmlAgilityPack Problem kodowania

Ta strona jest kodowana w 1257 (bałtyckiego), ale zwraca textBox1.Text = GodLikeHTML.DocumentNode.OuterHtml; zniekształconego tekstu -. Diacritics bałtyckie są przekształcane w niektórych dziwnych znaków kilka długich ciągów :(

I tak, próbowałem forum HtmlAgilityPack one nie ssać

PS nie jestem programistą, ale pracuję nad projektem społeczności i naprawdę trzeba uzyskać ten kod działa dzięki;..}

Odpowiedz

21

rzeczywistości strona jest kodowany z UTF-8.

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

zadziała.

Albo można użyć kodu w moim SO answer Które wykryć kodowanie z nagłówków HTTP lub meta tagi, pl prawidłowo ponownie zakodować. (Obsługuje również gzip, aby zminimalizować pobieranie).

z klasą pobrać kod wyglądałby następująco:

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

Tak, że „zwiększenie pracy: D Wow, dość prosty, nie jest to. Dzięki! – August

+2

wiele dzięki, dostał się do szalonych bohaterów, takich jak czy cokolwiek innego, to teraz działa poprawnie –

+0

Dehell jest GodLikeHTML? Czy jest to synonim, czy naprawdę szukam klasy o tej nazwie? – helmesjo

1

które próbują zmienić GodLikeHTML.Load(GodLikeClient.OpenRead("www.alfa.lt"), Encoding.GetEncoding(1257));

+0

przepraszam, mam Misguided wy - został zakodowany w UTF. Dzięki za pomoc mimo. – August

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

nadzieję, że to pomaga :)

11

miałem podobne problemy z kodowaniem. Naprawiłem go w najbardziej aktualnej wersji HtmlAgilityPack, dodając següents do mojego inicjalizacji WebClient.

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

Najlepsza odpowiedź (dlaczego używać webclienta, kiedy można to zrobić tylko przy użyciu HTMLAgilityPack – a1204773

1

UTF8 nie dla mnie, ale po ustawieniu kodowania tak, większość stron starałem się po prostu Zeskrobać pracował WEL:

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

Być może komuś pomóc.

0

To jest moje rozwiązanie

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

jeśli wszystkie te postu nie działa, wystarczy użyć tego: WebUtility.HtmlDecode("Your html text");