IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème de caractères spéciaux lors de la lecture d'une page HTML


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Par défaut Problème de caractères spéciaux lors de la lecture d'une page HTML
    Salut à tous,

    J'ai une application qui récupère les données d'une page HTML selon la demande de l'utilisateur mais j'ai un aussi au niveau de l'encodage des caractères. Les pages qui peuvent être récupérés sont toutes sur le même site mais le contenu peut être différent.

    Hors, ce contenu peut parfois ne pas avoir accepté les caractères spéciaux et m'affichant à la place leur code du style "&#XXX;". J'ai donc essayé différents Encoding pour le StreamReader mais rien n'y fait. Voici le bout de code en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Proxy = WebRequest.GetSystemWebProxy();
    request.Proxy.Credentials = new NetworkCredential("UserName", "XXXXX");
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
     
    StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("ISO-8859-15"));
    content = Functions.sr.ReadToEnd();
     
    sr.Close();
    response.Close();
    Une idée d'où peut venir le problème?

  2. #2
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Bonjour.

    As-tu pensé à vérifier la valeur de HttpWebResponse.ContentType ? Celui-ci devrait spécifier l'encodage utilisé. Note qu'il dépend sans doute des encodages acceptés spécifiés dans la requête que tu as envoyée. Enfin il est toujours utile d'avoir Fiddler installé sur la machine pour vérifier les messages envoyés et les réponses reçues (libre, open source, simple à utiliser pour un usage basique : la requête en haut, la réponse en bas).

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Par défaut
    J'avais bien vérifié le content-type qui est toujours "text/html", et l'encodage de la page est spécifié sur "ISO-8859-1". Ce que je ne comprends pas, c'est que certaines pages ne rencontrent aucuns problèmes alors que d'autres ne me retournent pas les caractères spéciaux dans le bon format, les 2 cas sont pourtant sur le même site et le même type d'url (seulement une variable change).

  4. #4
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    ContentType est uniquement "text/html" sans précision d'encodage ? Dans ce cas quelles sont les valeurs de ContentEncoding et CharacterSet ? Et as-tu vérifié avec Fiddler si c'était bien la valeur retournée par le site et non une valeur présumée par VS ?

    Car quand tu parles de l'encodage "ISO-8859-1" de la "page", j'imagine que c'est un document html et que tu te réfères à la balise meta correspondante et non à la valeur spécifiée par l'en-tête http ?

    Enfin je t'invite à vérifier que toutes ces valeurs sont identiques dans les deux cas.

    PS : Si tu peux nous donner l'url (ou plutôt les url puisqu'il y a deux cas), n'hésite pas. Je présume que non vu que tu fournis des identifiants mais au cas où...

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Par défaut
    Le char-set n'est pas précisé dans le ContentType. Par contre il est bien présent dans CharacterSet en tant que "ISO-8859-1" et le ContentEnding n'est pas attribué. J'ai vérifié avec Fiddler et l'entête n'affiche effectivement pas le char-set, il est cependant présent dans les balises meta du site.

    Voici 2 pages pour exemples (la 2e est sujette aux problèmes de caractères):
    - 1ère page
    - 2e page

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Par défaut
    J'ai testé pas mal d'encodages différents, de passer par d'autres méthodes mais rien à faire, certaines pages contiennent tout de même ces caractères de type "&#XXX;". Je ne sais plus quoi faire honnêtement, j'ai essayé de trouver la différence entre les 2 pages ci-dessus mais je ne vois que des similitudes (normal venant du même site) ... ça commence à devenir louche.

    Le header de la page (toujours pareil):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
    J'ai d'ailleurs remarqué que les pages ayant ce problèmes contiennent pourtant des caractères spéciaux seulement dans les balises HTML, le problème ne semble se présenter que sur le contenu de la page, c'est-à-dire le texte entre balises HTML. Une idée?

  7. #7
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Bonjour.

    Je ne t'oublie pas, je comptais faire quelques tests moi-même plus tard dans la journée. En attendant, juste pour être sûr, tes caractères spéciaux, ce ne seraient pas des "é" ou "&eagrave;" par hasard ?
    Je ne pense pas mais je préfère demander.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Par défaut
    Non ce sont bien des caractères de type "&#XXX;" (XXX correspondant à un des chiffres) qui posent problème

    J'ai fait une Regex pour trouver ces différents caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Match m = Regex.Match(texte, @"\&\#[0-9]{1,4};")
    De ce fait je pourrais remplacer les caractères non-conformes, disons que cela me donne une solution temporaire en attendant de résoudre ce soucis d'encodage ...

  9. #9
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Ce n'est pas un problème d'encodage, tout est correct. C'est simplement une variante des codes html pour les caractères non-ASCII, comme é et autres. Si tu regardes le code source de la page dans ton navigateur, tu verras que ces caractères y sont aussi et c'est le navigateur qui les traduit correctement à l'affichage.

    Il y a deux fonctions dans le framework dotnet dédiée au remplacement de tous les codes html : WebUtility.HtmlDecode (v4 uniquement) et HttpUtility.HtmlDecode. Les deux sont identiques, la seule différence est que la seconde réclame l'ajout de System.Web.dll ) tes références, d'où l'introduction de WebUtility dans la v4.

    EDIT : Désolé, j'aurais pu comprendre hier soir qu'il ne s'agissait "que" de ça. Simplement je pensais initialement que ces "&#xxx" étaient l'affichage produit par le débogueur pour des caractères non-supportés, pas que tu étais littéralement confronté à ces séquences dans ton texte.

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Par défaut
    Pas de soucis, j'aurais aussi put être plus précis. En tout cas ça marche nickel, merci beaucoup je ne savais pas qu'il fallait passer par un décodeur.

  11. #11
    Invité de passage
    Profil pro
    Inscrit en
    Août 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 1
    Par défaut
    Merci DonQuiche!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                // prepare the web page we will be asking for
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
                request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
     
                // execute the request
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
     
                // we will read data via the response stream
                Stream resStream = response.GetResponseStream();
     
                StreamReader reader = new StreamReader(resStream, Encoding.UTF8);
     
                return WebUtility.HtmlDecode(reader.ReadToEnd());

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/06/2009, 11h56
  2. Lecture d'une page html
    Par Chipsssit dans le forum Langage
    Réponses: 2
    Dernier message: 05/03/2009, 19h21
  3. Problème pour ouvrir des fichiers .exe et .jar via une page html
    Par coyaote dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/02/2007, 12h28
  4. [SOAP] problème de caractères spéciaux
    Par ep31 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 02/12/2005, 17h43
  5. [SQL Server] problème de caractères spéciaux
    Par mbibim63 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 02/06/2005, 18h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo