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

Langage Java Discussion :

Problème de charset en réccupérant source HTML


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    SrK
    SrK est déconnecté
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 213
    Par défaut Problème de charset en réccupérant source HTML
    Bonjour,

    J'ai fait une méthode java qui récupère le code source d'une page HTML pour une adresse donnée.

    Le problème, c'est qu'elle ne récupère pas correctement les accents etc...

    Avez vous une idée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    URL url = new URL(adresse);
    URLConnection uc = url.openConnection();
    InputStream in = uc.getInputStream();
    int c = in.read();
    StringBuilder  build = new StringBuilder();
    while (c != -1) {
      build.append((char) c);
      c = in.read();
    }
      toreturn = build.toString();
    Merci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Il faut lire la spécification HTML :

    1. Si une balise META définit l'encodage, il doit être pris en compte.
    2. Sinon, se baser sur l'en-tête XML (éventuel)
    3. Sinon, se baser sur l'en-tête HTTP.
    4. Sinon, prendre l'encodage par défaut de la machine.

    Tu dois changer l'interprétation de ton charset si tu rencontres l'un des cas.

  3. #3
    SrK
    SrK est déconnecté
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 213
    Par défaut
    Merci, pour la réponse, dans un premier temps je vais m'attacher à comment avec un encodage statique avoir les bons caractères.

    Comment prendre en compte le charset quand tu récupères l'inputstream, si par défaut je veux mettre UTF-8 ?

    Dois je changer ma manière de récupérer ? Le problème, c'est que je n'ai pas trop de choix en passage par URLConnection

    Sinon, quand même en ce qui concerne la récupération dynamique de l'encodage.
    Pour l'instant, avec uc.getHeaderField("Content-Type") je peux réccup le contenu du meta.
    Pour le XML je vois pas trop. Par contre je mettrai UTF-8 par défaut si les test des balises meta et xml ne sont pas bonnes.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Si tu veux que ce soit traité comme de l'UTF-8, il faut envoyer la page avec de l'UTF-8. Pour ça, il faut envoyer un en-tête avec ton serveur (fonction header() avec PHP). Et il faut en plus que ta page soit encodée en UTF-8 (Eclipse le permet, ainsi que la plupart des éditeurs de texte).

    Par contre, je ne crois pas que tu récupères le contenu de la balise META avec getHeaderField(). Il faut voir dans la doc, mais je suis presque certain que non.

  5. #5
    SrK
    SrK est déconnecté
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 213
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("Content-Type : " + uc.getHeaderField("Content-Type"));
    m'a retourné :
    text/html;charset=UTF-8
    Peut être que les balises meta sont mal formées, car getContentEncoding() me retourne null

    Sinon, ma page HTML que j'envoi je set bien UTF-8 dans l'encoding, mais c'est pas la que se pose le problème mais avant en fait.

    C'est au moment ou je récupérè le contenu de la page, il me stock les mauvais caractères dans bon StringBuffer.
    Pour vérifier j'ai rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println((char)c);
    dans ma boucle, et au lieu de m'afficher un "é", il m'affiche "é".

  6. #6
    SrK
    SrK est déconnecté
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 213
    Par défaut
    Bon j'ai optimisé un peu le code qui récupère le flux HTML, mais j'ai toujours le même problème avec les caractères genre "é" ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    InputStream in = new URL(adresse).openStream();
    try {
      InputStreamReader inR = new InputStreamReader( in );
      BufferedReader buf = new BufferedReader( inR );
      String line;
      while ( ( line = buf.readLine() ) != null ) {
        textHtml = textHtml + line;
      }
    } finally {
      in.close();
    }
    Need help !

    Sinon, pour réccup l'encodage dans la balise meta, je le fais désormais comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    URLConnection uc =  new URL(adresse).openConnection();
    if (!uc.getHeaderField("Content-Type").equals("") && uc.getHeaderField("Content-Type").length() > 0)
      {
      String[] t = uc.getHeaderField("Content-Type").split(";");
      for ( int x=0;x< t.length; x++) {
        if (t[x].startsWith("charset="))
          encodage = t[x].substring("charset=".length());
      }				
    }

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

Discussions similaires

  1. problème d'affichage RSS 2.0 depuis source html
    Par mims1664 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 09/09/2008, 11h03
  2. [RegEx] Problème pour enlever les tags javascript d'une source HTML
    Par Easyweb dans le forum Langage
    Réponses: 4
    Dernier message: 25/02/2006, 02h10
  3. [Tableaux] Récupérer source html
    Par philippef dans le forum Langage
    Réponses: 16
    Dernier message: 10/10/2005, 15h52
  4. Problème de chaine sur une page HTML
    Par Kerod dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/11/2004, 16h23
  5. Problème de charset
    Par Yodalf dans le forum Langage
    Réponses: 3
    Dernier message: 21/10/2004, 09h29

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