Conversion UTF-8 vers ISO

cs_flexx Messages postés 42 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 18 août 2010 - 25 juin 2007 à 19:48
cs_flexx Messages postés 42 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 18 août 2010 - 26 juin 2007 à 19:03
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.

------
// Création de la chaine en UTF-8
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]));
 

// Convertion en ISO
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

1 réponse

cs_flexx Messages postés 42 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 18 août 2010
26 juin 2007 à 19:03
Pour faire plus simple, je cherche à convertir une chaine UTF-8 en hexadécimal mais avec le code correspondant aux caractères en ISO.

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])));

Dans cet exemple, je crée ma chaine avec CO.
Mais lorsque je refais la convertion à partir du caractère, j'obtiens FFFD !

Pouvez-vous me dire où est la perte de données et comment réaliser correctement la convertion svp ?
0