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 : Conversion UTF-8 vers ISO-8859-?


Sujet :

Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 56
    Points
    56
    Par défaut Encodage : Conversion UTF-8 vers ISO-8859-?
    Bonjour.

    Je souhaiterai internationnaliser une application J2EE qui fonctionne actuellement en ISO-8859-1.
    Je songe donc à la passer en UTF-8 pour afficher/saisir du russe (en l'occurence).
    Le probleme c'est que cette application fonctionne avec un mainframe sur lequel je n'ai pas trop la main (les caractères sont codés et stockés sur un octet).
    J'aurai donc besoin de convertir de l'UTF-8 en ISO-8859-? (en fonction de la langue choisie : -5 pour le russe par exxemple) et réciproquement.

  2. #2
    Membre actif
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Points : 268
    Points
    268
    Par défaut jdkx.x.x/bin/native2ascii.exe
    Je ne suis pas sûr de comprendre exactement ta problèmatique, mais pour la convertion d'un codage à l'autre ce petit utilitaire est très pratique:
    jdkx.x.x/bin/native2ascii.exe

    sinon tu peux jeter un coup d'oeil là:
    http://www.developpez.net/forums/sho...d.php?t=243726
    S'il n'y a pas de solutions, il n'y a pas de problème.

  3. #3
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  4. #4
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 56
    Points
    56
    Par défaut
    En fait mon problème est le suivant :
    Actuellement l'utilisateur saisi un libellé de 10 caractères ISO-8859-1 (il est stocké sur 10 octets sur le mainframe) donc pas de problèmes.
    Si on passe en UTF-8 pour saisir du russe, ce libellé de 10 caractères sera stocké sur + de 10 octets, et là c'est le drame (car le mainframe ne sait pas faire : en résumé le stockage se fait sur des fichiers gros syteme à longueur fixe)

  5. #5
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2003
    Messages : 79
    Points : 107
    Points
    107
    Par défaut
    Je pense que le lien fournit par Sinok correspond à ce que tu veux.

    Peux être n'as tu pas pris le temps de le lire entièrement, je colle donc la partie qui correspond à ce que tu cherches.

    Voici un exemple permettant de convertir une chaîne codée en UTF-8 en ISO-8859-1 (Latin 1, français)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String stringUTF8 = ... ; 
    String stringISO = new String ( stringUTF8.getBytes(), "ISO-8859-1" );

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 53
    Points : 34
    Points
    34
    Par défaut
    Bonjour

    Dans une application, je reçois une chaine de caractère avec pour entete 0x15 0xC0, visiblement encodé en UTF-8 puisque lorsque j'affiche la valeur décimale j'obtiens 65533 au lieu de 192.

    Je cherche donc à convertir cet entete en ISO et je vérifie que j'obtiens bien en décimal 21(0x15) et 192(0xC0).

    Le problème, c'est que j'obtiens 63 au lieu de 192 !
    L'exemple ci-dessous montre la conversion effectuée.

    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
     
    String stringUTF8 = new String(new byte[] {0x15, (byte)0xC0}, "UTF-8");		
    char [] myTabDonneesUTF8 = stringUTF8.toCharArray();
     
    System.out.println(myTabDonneesUTF8);
    System.out.println("1er caract = " + myTabDonneesUTF8[0] + "   : " + (int)(myTabDonneesUTF8[0]));
    System.out.println("2eme caract = " + myTabDonneesUTF8[1] + "   : " + (int)(myTabDonneesUTF8[1]));
     
     
    String stringISO = new String (stringUTF8.getBytes(), "ISO-8859-1" );
    char [] myTabDonneesISO = stringISO.toCharArray();
     
    System.out.println(myTabDonneesISO);
    System.out.println("1er caract = " + myTabDonneesISO[0] + "   : " + (int)(myTabDonneesISO[0]));
    System.out.println("2eme caract = " + myTabDonneesISO[1] + "   : " + (int)(myTabDonneesISO[1]));
    Il doit y avoir un problème de dépassement qqpart (255 - 63 = 192).

    Pouvez-vous m'éclairer sur ce sujet ?

    Merci d'avance

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 53
    Points : 34
    Points
    34
    Par défaut
    J'ai refais un mini-exemple.
    Je crée ma chaine avec CO. Mais lorsque je refais la convertion à partir du caractère, j'obtiens FFFD !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String maChaine = new String(new byte[] {0x15, (byte)0xC0}, "UTF-8");
    char [] tabChaine = maChaine.toCharArray();
    System.out.println("Valeur hexa : " + Integer.toHexString((int)(tabChaine[1])));
    Pouvez-vous me dire où est la perte de données et comment réaliser correctement la convertion svp ?

Discussions similaires

  1. Encodage utf-8 vers iso-8859-15
    Par ruddy32 dans le forum DB2
    Réponses: 1
    Dernier message: 20/03/2012, 10h12
  2. Lecture de fichier: encodage utf-8 et iso-8859-1
    Par WindRider_ dans le forum Langage
    Réponses: 2
    Dernier message: 04/11/2009, 10h23
  3. [1.x] Encodage UTF-8 et ISO-8859-1
    Par Alahel dans le forum Symfony
    Réponses: 8
    Dernier message: 09/09/2008, 11h52
  4. Flux RSS avec PHP : encodage UTF-8 vers ISO-8559-1
    Par eric437 dans le forum Langage
    Réponses: 1
    Dernier message: 03/08/2008, 20h56
  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