Conversion de jeu de caractères html utf-8 en ISO-8859-1 via C #

c# encode html html-agility-pack iso-8859-1

Question

J'ai eu du mal à convertir la valeur html d'un attribut, sans succès.

Voici le code HTML que je tente de convertir (bien sûr, le jeu de caractères ne sera pas affiché ici, mais je le vois exactement comme vous le voyez).

<a href="https://sistemas.usp.br/jupiterweb/listarGradeCurricular?codcg=12&amp;codcur=12012&amp;codhab=1&amp;tipo=N" target="_blank">Administração – São Paulo – diurno</a>

Très bien, la valeur de ce code est "Administração - São Paulo - diurno".

J'utilise HtmlAgilityPack pour analyser la page HtmlPage, et une fois que j'atteins ce nœud, sa valeur innerText ressemble à ceci: Administração â São Paulo â diurno

Je suppose que le jeu de caractères original de la page est UTF-8 car c’est ce que la balise de codage sur le code HTML me dit.

Comment puis-je convertir cette chaîne étrange à: Administração - São Paulo - Diurno ?

J'ai déjà essayé ces threads: thread un et thread deux et rien n'a résolu mon problème

EDIT: Je reçois la page via un C # WebRequest Get.

EDIT2: balise HtmlAgilityPack ajoutée

Le problème était isolé: WebRequest dérange parfois le code HTML.

Existe-t-il un autre moyen de définir le codage? J'essaie: _webReq.Encoding = "ISO-8859-1"

Merci d'avance

Réponse acceptée

Après un petit test, vous pouvez constater que la chaîne n'est pas correctement ramenée à sa forme originale.

Échantillon test:

 var item = "Administração - São Paulo - Diurno";
 Console.WriteLine(item);

 var buffer = Encoding.UTF8.GetBytes(item);
 var item2 = Encoding.Default.GetString(buffer);
 Console.WriteLine(item2);

Cela imprime:

Administraçao - Sao Paulo - Diurno
AdministraA§A£o - SA£o Paulo - Diurno

Comme vous pouvez le constater, la chaîne d'origine est convertie en octets à l'aide de UTF8 , mais elle est ensuite reconvertie en une chaîne à l'aide du codage par défaut .

C'est faux.

Si WebRequest.GetResponse () renvoie la chaîne comme une valeur incorrecte, il y a un problème avec cette méthode. Essayez de définir la propriété TransferEncoding sur HttpWebRequest sur UTF8.

Avant de pouvoir définir la propriété TransferEncoding, vous devez d'abord définir la propriété SendChunked sur true. Effacer ClearEncoding en lui attribuant la valeur null n'a aucun effet sur la valeur de SendChunked. Les valeurs affectées à la propriété TransferEncoding remplacent tout contenu existant.

Ou vous pouvez essayer de définir le codage sur UTF8 sur le StreamReader que vous ouvrez. Puis-je voir votre code?


Réponse populaire

j'ai résolu avec:

    HtmlWeb Webget = new HtmlWeb();
    HtmlDocument doc = new HtmlDocument();
    Webget.AutoDetectEncoding = false;
    Webget.OverrideEncoding = Encoding.UTF8;

    doc_tmp.OptionOutputAsXml = true;
    doc_tmp.OptionReadEncoding = true;
    doc_tmp.OptionFixNestedTags = true;
    doc_tmp.OptionDefaultStreamEncoding = Encoding.UTF8;

            doc_tmp.LoadHtml(tmp.InnerHtml);
            doc_tmp.Save(Console.Out);


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi