Encodages d’octets et chaînes de caractères

Si un tableau d’octets contient du texte non-Unicode, vous pouvez convertir le texte en Unicode avec l’une des méthodes du constructeur String. Inversement, vous pouvez convertir un objet String en un tableau d’octets de caractères non-Unicode avec la méthode String.getBytes. Lorsque vous invoquez l’une de ces méthodes, vous spécifiez l’identifiant d’encodage comme l’un des paramètres.

L’exemple qui suit convertit les caractères entre UTF-8 et Unicode. UTF-8 est un format de transmission pour Unicode qui est sûr pour les systèmes de fichiers UNIX. Le code source complet de l’exemple se trouve dans le fichier StringConverter.java.

Le programme StringConverter commence par créer un String contenant des caractères Unicode :

String original = new String("A" + "\u00ea" + "\u00f1" + "\u00fc" + "C");

Lorsqu’elle est imprimée, la String nommée original apparaît comme :

AêñüC

Pour convertir l’objet String en UTF-8, invoquez la méthode getBytes et spécifiez l’identifiant d’encodage approprié comme paramètre. La méthode getBytes renvoie un tableau d’octets au format UTF-8. Pour créer un objet String à partir d’un tableau d’octets non-Unicode, invoquez le constructeur String avec le paramètre d’encodage. Le code qui effectue ces appels est enfermé dans un bloc try, au cas où l’encodage spécifié ne serait pas pris en charge :

Le programme StringConverter imprime les valeurs des tableaux utf8Bytes et defaultBytes pour démontrer un point important : La longueur du texte converti peut ne pas être la même que celle du texte source. Certains caractères Unicode se traduisent par des octets uniques, d’autres par des paires ou des triplets d’octets.

La méthode printBytes affiche les tableaux d’octets en invoquant la méthode byteToHex, qui est définie dans le fichier source, UnicodeFormatter.java. Voici la méthode printBytes:

La sortie de la méthode printBytes suit. Notez que seuls les premier et dernier octets, les caractères A et C, sont les mêmes dans les deux tableaux :

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *