web-dev-qa-db-fra.com

Problème d'encodage C # et HtmlAgilityPack

WebClient GodLikeClient = new WebClient();
HtmlAgilityPack.HtmlDocument GodLikeHTML = new HtmlAgilityPack.HtmlDocument();

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

Donc ce code retourne: "Skaitytojo klausimas psichologui: kas lemia homoseksualumÄ…? - Naujienâ³ portalas Alfa.lt" au lieu de "Skaitytojo klausimas psichologui: kas lemia homoseksualumą? - Naujienų portalas Alfa.lt.".

Cette page Web est codée en 1257 (baltique), mais textBox1.Text = GodLikeHTML.DocumentNode.OuterHtml; renvoie le texte déformé - les signes diacritiques baltes sont transformés en chaînes étranges de plusieurs caractères comprenant de longues chaînes :( 

Et oui, j'ai essayé les forums HtmlAgilityPack. Ils sucent.

P.S. Je ne suis pas un programmeur, mais je travaille sur un projet communautaire et j'ai vraiment besoin que ce code fonctionne. Merci ;}

22
August

En réalité, la page est codée avec UTF-8.

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

marchera.

Vous pouvez également utiliser le code de mon SO answer qui détecte l’encodage à partir d’en-têtes http ou de balises méta, et le réencode correctement. (Il prend également en charge gzip pour minimiser votre téléchargement).

Avec la classe de téléchargement, votre code ressemblerait à ceci:

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

J'ai eu un problème d'encodage similaire. Je l'ai corrigé, dans la version la plus récente de HtmlAgilityPack, en ajoutant ce qui suit à mon initialisation WebClient.

var htmlWeb = new HtmlWeb();
htmlWeb.OverrideEncoding = Encoding.UTF8;
var doc = htmlWeb.Load("www.alfa.lt");
11
craastad
 HtmlAgilityPack.HtmlDocument doc = new HtmlDocument(); 
 StreamReader reader = new StreamReader(WebRequest.Create(YourUrl).GetResponse().GetResponseStream(), Encoding.Default); //put your encoding            
 doc.Load(reader);

j'espère que ça aide :)

5
Sagiv Ofek

UTF8 n'a pas fonctionné pour moi, mais après avoir défini l'encodage comme ceci, la plupart des pages que j'essayais de gratter fonctionnaient à merveille:

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

Peut-être que cela pourrait aider quelqu'un. 

4
Tys

essayez de changer cela en GodLikeHTML.Load(GodLikeClient.OpenRead("www.alfa.lt"), Encoding.GetEncoding(1257));

1
Ilia G

C'est ma solution

 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
eliprodigy

si toutes ces publications ne fonctionnent pas, utilisez simplement ceci: WebUtility.HtmlDecode("Your html text");

0
Ebleme