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

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

Quindi, questo codice restituisce " 'domande psicologo: ciò che provoca l'omosessualità ... - Naujienų portale Alfa.lt? Invece di" Lettori Lettori"domande psicologo: ciò che provoca l'omosessualità - News Portal Alfa.lt? ".C# e HtmlAgilityPack problema di codifica

Questa pagina web è codificato nel 1257 (Baltico), ma restituisce textBox1.Text = GodLikeHTML.DocumentNode.OuterHtml; il testo distorto -. Diacritici baltici si trasformano in alcuni personaggi strani diverse stringhe lunghe :(

E sì, ho provato il forum HtmlAgilityPack Essi non succhiare

PS io non sono un programmatore, ma io lavoro su un progetto della comunità e ho davvero bisogno di ottenere questo codice di lavoro Grazie,..}

risposta

21

realtà la pagina è codificato con UTF-8.

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

funzionerà.

Oppure si potrebbe usare il codice nel mio SO answer che rilevano la codifica delle intestazioni HTTP o meta-tag, en correttamente ricodificare. (Supporta anche gzip per minimizzare il download).

Con la classe scaricare il codice sarà simile:

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

Yup, che 'aumentando il lavoro: D Wow, molto semplice, non è vero. Grazie! – August

+2

molte grazie, avuto modo di personaggi folli come o qualsiasi altra cosa, ora si sta lavorando bene –

+0

Dehell è GodLikeHTML? Si tratta di un sinonimo o realtà Cerco una classe con quella casa? – helmesjo

1

che cercano di cambiare il GodLikeHTML.Load(GodLikeClient.OpenRead("www.alfa.lt"), Encoding.GetEncoding(1257));

+0

dispiace, ho Misguided voi - è stato codificato in UTF. Grazie per il vostro aiuto però. – August

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

Speranza che aiuta :)

11

Ho avuto un simili problemi di codifica. Ho riparato, nella versione più recente di HtmlAgilityPack, con l'aggiunta di següents al mio inizializzazione WebClient.

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

Risposta migliore (perché utilizzare webclient quando è possibile farlo utilizzando solo HTMLAgilityPack – a1204773

1

UTF8 non ha funzionato per me, ma dopo aver impostato la codifica in questo modo, la maggior parte delle pagine che stava cercando di appena Raschiare lavorato wel:

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

Forse potrebbe aiutare qualcuno.

0

Questa è la mia soluzione

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

se tutti quei post non funziona, Basta usare questo: WebUtility.HtmlDecode("Your html text");