logo

Encodage de chaîne Java

En Java, quand on traite Chaîne il est parfois nécessaire de coder une chaîne dans un jeu de caractères spécifique. Codage est un moyen de convertir des données d'un format à un autre. Les objets chaîne utilisent le codage UTF-16. Le problème avec l'UTF-16 est qu'il ne peut pas être modifié. Il n'existe qu'un seul moyen d'obtenir un codage différent, à savoir un tableau d'octets []. La méthode de codage n'est pas adaptée si nous obtenons des données inattendues. Dans cette section, nous apprendrons comment encoder une chaîne Java .

Remarque : Il n'est pas possible d'encoder une chaîne en UTF-8. Alors, utilisez ByteBuffer ou appelez un tableau dessus pour obtenir un octet[].

Avant d'avancer dans cette section, nous devons comprendre le codage des caractères. Jetons un coup d'oeil rapide. Comprenons pourquoi nous devons coder une chaîne .

entreprise contre entreprise

Encodage de caractère est une technique pour convertir des données texte en nombres binaires. Nous pouvons attribuer des valeurs numériques uniques à des caractères spécifiques et convertir ces nombres en langage binaire. Ces nombres binaires peuvent ensuite être reconvertis en caractères originaux en fonction de leurs valeurs.

Problème

Supposons que nous ayons une chaîne allemande Au revoir et il est nécessaire de l'encoder. Considérez l'extrait de code suivant :

 String str = 'Tsch�ss'; byte[] bytesOfString = str.getBytes(); String encoded_String = new String(bytesOfString, StandardCharsets.US_ASCII); assertNotEquals(encoded_String, str); 

Si nous encodons la chaîne en utilisant US_ASCII, cela donne le Au revoir car l'encodage US_ASCII ne comprend pas le caractère non-ASCII ( toi ). Lorsque nous convertissons une chaîne codée ASCII en UTF-8, nous obtenons la même chaîne.

 String str = 'GoodBye'; byte[] bytesOfString = str.getBytes(); String asciiEncondedEnglishString = new String(bytesOfString, StandardCharsets.US_ASCII); assertEquals(encoded_String, str); 

Si un tableau byte[] contient du texte non Unicode, nous pouvons convertir le texte en Unicode avec Chaîne constructeur. Inversement, nous pouvons également convertir un objet String en un tableau byte[] de caractères non Unicode avec le String.getBytes() méthode. Codons la chaîne en utilisant le getBytes() méthode.

Utilisation de la méthode String.getBytes()

Java Chaîne classe fournit le Méthode getBytes() qui est utilisé pour coder la chaîne en UTF-8. La méthode convertit la chaîne en une séquence d'octets et stocke le résultat dans un tableau.

Syntaxe:

 public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

Il analyse charsetName en tant que paramètre et renvoie le tableau d'octets. Il jette le UnsupportedEncodingException si le jeu de caractères nommé n'est pas pris en charge.

Créons un programme Java qui convertit une chaîne en codage UTF-8.

StringEncodingExample.java

 public class StringEncodingExample { public static void main(String args[]) throws Exception { //string to encode String str = 'Google Cloud'; //invokes the getBytes() method and stores an array of bytes into array[] byte array[] = str.getBytes('UTF8'); System.out.println('Encoded String: '); //enhanced for loop that iterates over the array for (byte x: array) { //prints the sequence of bytes System.out.print(x+' '); } } } 

Sortir:

 Encoded String: 71 111 111 103 108 101 32 67 108 111 117 100 

Utilisation de la classe StandardCharsets

Nous pouvons également utiliser la classe StandardCharset pour encoder la chaîne. Il y a deux étapes pour coder la chaîne. Tout d’abord, décodez la chaîne en octets, puis encodez-la en UTF-8. Par exemple, considérons le code suivant :

 String str = ' Tsch�ss'; ByteBuffer buffer = StandardCharsets.UTF_8.encode(str); String encoded_String = StandardCharsets.UTF_8.decode(buffer).toString(); assertEquals(str, encoded_String); 

Une autre façon d’encoder une chaîne consiste à utiliser l’encodage Base64. Nous discuterons de l’encodage et du décodage Base64 dans la section suivante.