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

Entrée/Sortie Java Discussion :

UTF-8 to ISO-8859-1


Sujet :

Entrée/Sortie Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 10
    Points : 5
    Points
    5
    Par défaut UTF-8 to ISO-8859-1
    salut je débarque

    mon pb est déjà résolu mais j'ai pas compris pourquoi !
    si qqn peut m'aider a elucider ce mystere...

    soit "row" une String encodée en UTF-8
    je veux l'afficher dans la sortie std sans pb d'accents

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(new String(row.getBytes(),"ISO-8859-1"));
    => marche pas
    (pourtant, cette solution vient de ce forum)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(new String(row.getBytes("UTF-8"),"ISO-8859-1"));
    => marche pas non plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(new String(row.getBytes("ISO-8859-1"),"UTF-8"));
    => marche !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(new String(row.getBytes("ISO-8859-1")));
    => marche pas

    javadoc String dit :

    1)
    public byte[] getBytes(String charsetName)
    throws UnsupportedEncodingException

    Encodes this String into a sequence of bytes using the named charset, storing the result into a new byte array.
    => ok, cela justifie "getBytes("ISO-8859-1")"

    2)
    public String(byte[] bytes,
    String charsetName)
    throws UnsupportedEncodingException

    Constructs a new String by decoding the specified array of bytes using the specified charset.
    => pourquoi diable a-t-on besoin de cela puisque la chaine est deja réencodée avec getBytes("ISO-8859-1") ?


    chui paumé
    ce doit etre la fatigue
    desolé d'avance si c le k


  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    Tous ces codes sont complètement faux !
    Quel que soit le constructeur utilisé, en Java une String est toujours encodé en UTF-16 en interne...

    La méthode getBytes() permet d'obtenir une suite de bytes représentant la chaine dans un autre encodage.


    Avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(new String(row.getBytes("ISO-8859-1"),"UTF-8"));
    Tu encodes la chaine en ISO-8859-1, que tu interprètes ensuite comme du UTF-8, ce qui est parfaitement incorrect.
    Si cela te donne un résultat correct cela signifie que ta chaine n'a pas été correctement initialisé.


    Bref si tu as un problème d'encodage, tu as principalement deux origines du problèmes :
    • La String n'a pas été créé correctement (comment tu la récupères ?)
    • L'emplacement sur lequel tu l'affiches ne supporte pas cet encodage. Tu l'affiche dans la console, mais dans quelle console (Ms-Dos, Linux, eclipse, autres...) ?


    a++

  3. #3
    Membre actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Points : 252
    Points
    252
    Par défaut
    Pour illustrer les propos précédent, il suffit de faire un simple test d'affichage sur des consoles différentes dans des encodages différents.

    Voici une simple classe de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    public class ShowString {
        public static void main(String[] args) {
            String message = "\u00E8\u00E9\u00EA\u00EB";
     
            showString(message, Charset.defaultCharset());
            showString(message, Charset.forName("CP850"));
            showString(message, Charset.forName("UTF-8"));
        }
     
        private static void showString(String s, Charset c) {
            PrintWriter outWriter = null;
     
            System.out.println("using charset: " + c);
     
            outWriter = new PrintWriter(new OutputStreamWriter(System.out, c));
            outWriter.println(s);
            outWriter.flush();
        }
    }
    Le resultat sous eclipse (pour ma config qui utilise le default encoding de windows CP1252):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    using charset: windows-1252
    èéêë
    using charset: IBM850
    Š‚ˆ‰
    using charset: UTF-8
    èéêë
    La même exécutée sous DOS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    using charset: windows-1252
    ÞÚÛÙ
    using charset: IBM850
    èéêë
    using charset: UTF-8
    ├¿├®├¬├½
    On voit que les deux consoles n'utilisent pas le même encodage pour autant à chaque fois on a écrit la même String.

Discussions similaires

  1. Convertir une chaine UTF-8 en ISO-8859-1
    Par gargantua dans le forum Général Java
    Réponses: 4
    Dernier message: 31/03/2009, 15h48
  2. [1.x] Encodage UTF-8 et ISO-8859-1
    Par Alahel dans le forum Symfony
    Réponses: 8
    Dernier message: 09/09/2008, 11h52
  3. Encoder une exception UTF-8 en ISO-8859-1
    Par Brunettia dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 10/06/2008, 11h36
  4. Encodage : Conversion UTF-8 vers ISO-8859-?
    Par polo54 dans le forum Général Java
    Réponses: 6
    Dernier message: 26/06/2007, 19h10
  5. encodage UTF-8 vers ISO-8859-1
    Par taouja dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 13/04/2007, 11h03

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