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

Java Discussion :

Encodage caractères java


Sujet :

Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 18
    Points : 16
    Points
    16
    Par défaut Encodage caractères java
    Bonjour à tous,
    voila un petit problème que j'ai actuellement avec l'encodage des caractères.
    Je veux inclure une page html (par exemple www.lemonde.fr) dans un application web java EE.
    j'ai un petit problème d'accent selon le mode d'encodage des caractères.
    Voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            ipsr = new InputStreamReader(url.openStream());
     
            BufferedReader br = new BufferedReader(ipsr);
     
            String content = "";
     
            while ((ligne=br.readLine())!=null)
            {
               ...
    dans ce mode là, l'encodage ISO fonctionne parfaitement, par contre l'utf8 ne gère pas les accents.
    Je voudrais faire quelque chose de générique, qui marche pour tout type d'encodage.
    La solution que j'ai en tète serait d'ouvrir le flux de lire l’entête du fichier pour voir son mode d'encodage, de fermer le flux (ipsr) puis de refaire un new avec le bon mode d'encodage (ex : ipsr = new InputStreamReader(url.openStream(),"utf-8"); )

    cette solution devrait fonctionner mais auriez vous une idée plus simple et plus performante ?

    Merci

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Une idée serait de lire tous les octets du fichier dans un byte[], puis de le transformer une première fois en String ASCII avec new String(bytes, "us-ascii"). Avec ça, essayer de trouver le bon charset dans le header, et refaire une nouvelle String avec le bon charset, à partir des octets que tu as gardés sous le coude.
    Cela évite de faire deux connexions, mais ça garde le fichier en mémoire. Si le fichier peut être trop gros, il reste possible de l'enregistrer sur le disque, et de le lire d'abord avec new InputStreamReader(new FileInputStream(file), "us-ascii") puis ensuite avec le bon encoding.

    Sinon, je rappelle qu'assez souvent, les serveurs webs indiquent le charset des pages webs qu'ils envoient, dans les headers HTTP, ce qui est plus simple que de devoir auto-détecter le charset dans le fichier. Ce n'est pas toujours le cas, mais très souvent quand même.
    Dans ce cas, il suffit de récupérer le header "Content-Type", de vérifier s'il contient l'information "charset=" et si oui, de la lire.
    Pour ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    URLConnection connection = url.openConnection();
    String contentType = connection.getContentType();
    // parser contentType pour voir s'il indique le charset.
     
    Reader reader = new InputStreamReader(connection.getInputStream(), charset);
    Mais pour éviter de se casser la tête je recommande plutôt la bibliothèque HttpClient : elle fournit elle-même un Reader construit avec le charset indiqué par le header Content-Type. (Par contre, si le charset n'est pas indiqué dans les headers, elle ne peut pas auto-détecter. Là il vaut mieux se reposer sur un truc comme HTMLParser.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup thelvin pour ta réponse très précise.
    J'ai pris la solution de l'URLConnection qui semble fonctionner à merveille.

    Encore merci

Discussions similaires

  1. Problème encodage caractères sépeciaux - XML - Java - Tomcat
    Par commande dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 19/08/2009, 12h31
  2. Probléme encodage caractéres spéciaux MYSQL
    Par FoxLeRenard dans le forum Installation
    Réponses: 1
    Dernier message: 20/02/2006, 12h10
  3. Réponses: 1
    Dernier message: 02/02/2006, 23h12
  4. Encodage caractères => Uniformisation
    Par jinh dans le forum C
    Réponses: 4
    Dernier message: 18/01/2006, 15h41
  5. [JSP] Encodage caractère
    Par tscoops dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 08/02/2005, 09h44

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