Introduction
Il existe de nombreux cas où nous devons convertir une chaîne de caractères en un tableau d'octets ou un tableau d'octets en une chaîne de caractères. Cela peut être fait grâce à l'utilisation d'ensembles de caractères. Dans ce laboratoire, nous allons apprendre à effectuer les deux types de conversions en utilisant plusieurs méthodes différentes.
Utilisation de la méthode getBytes()
La méthode getBytes() de la classe String fournit un moyen pratique d'obtenir un tableau d'octets. La classe String contient trois versions surchargées de la méthode getBytes().
String s = "demo!";
byte[] byteArr = s.getBytes();
Utilisation de la méthode getBytes(String charsetName)
import java.io.UnsupportedEncodingException;
String s = "demo!";
String namedCharset = "UTF-16";
byte[] byteArr = s.getBytes(namedCharset);
Utilisation de la méthode getBytes(Charset charset)
import java.nio.charset.Charset;
import java.util.Arrays;
String s = "demo!";
Charset charset = Charset.forName("UTF-16");
byte[] byteArr = s.getBytes(charset);
Utilisation de la méthode Charset.encode()
import java.nio.charset.StandardCharsets;
String s = "demo????????????";
Charset charset = StandardCharsets.ISO_8859_1;
byte[] byteArr = charset.encode(s).array();
Utilisation de CharsetEncoder
import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CodingErrorAction;
import java.nio.charset.StandardCharsets;
String s = "demo????????????";
CharsetEncoder charsetEncoder = StandardCharsets.ISO_8859_1.newEncoder();
charsetEncoder.onMalformedInput(CodingErrorAction.IGNORE);
charsetEncoder.onUnmappableCharacter(CodingErrorAction.REPLACE)
.replaceWith(new byte[] {-121});
byte[] byteArr = charsetEncoder.encode(CharBuffer.wrap(s)).array();
Utilisation du constructeur String
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33};
String stringFromBytes = new String(byteArr, "UTF-16");
Utilisation d'une instance de Charset
Charset charset = Charset.forName("UTF-16");
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33};
String stringFromBytes = new String(byteArr, charset);
Utilisation de la méthode Charset.decode()
import java.nio.ByteBuffer;
Charset charset = StandardCharsets.UTF_16;
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33, -10};
String stringFromBytes = charset.decode(ByteBuffer.wrap(byteArr)).toString();
Utilisation de CharsetDecoder
import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CodingErrorAction;
import java.nio.charset.StandardCharsets;
CharsetDecoder charsetDecoder = StandardCharsets.UTF_16.newDecoder();
charsetDecoder.onUnmappableCharacter(CodingErrorAction.REPLACE)
.onMalformedInput(CodingErrorAction.REPLACE)
.replaceWith("*");
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33, -10};
String stringFromBytes = charsetDecoder.decode(ByteBuffer.wrap(byteArr)).toString();
Exécution du code
Copiez le code que vous voulez exécuter dans un fichier tel que ~/projet/Conversion.java et exécutez la commande suivante dans le terminal :
javac Conversion.java && java Conversion
Résumé
En conclusion, il existe plusieurs façons de convertir une chaîne de caractères en tableau d'octets ou un tableau d'octets en chaîne de caractères. La manière la plus pratique est d'utiliser la méthode getBytes() de la classe String pour générer un tableau d'octets puis d'utiliser le constructeur de la classe String pour générer une chaîne à partir du tableau d'octets. Alternativement, nous pouvons utiliser les jeux de caractères (Charsets) et les encodeurs et décodeurs de jeux de caractères (CharsetEncoders et CharsetDecoders) pour effectuer les conversions.



