Le processus de conversion d’un tableau d’octets en chaîne est appelé décodage. Ce processus nécessite un Charset. Cependant, nous devrions utiliser charset pour décodage un tableau d'octets.
Il existe deux manières de convertir un tableau d'octets en chaîne :
- En utilisant Constructeur de classe de chaîne
- En utilisant Encodage UTF-8
En utilisant le constructeur de classe String
Le moyen le plus simple de convertir un tableau d'octets en chaîne, nous pouvons utiliser le constructeur de classe String avec byte[] comme argument du constructeur.
String str=new String(bytes);
Exemple
L’exemple suivant n’utilise aucun codage de caractères.
public class ByteArraytoStringExample { public static void main(String args[]) { try { byte[] bytes = 'hello world'.getBytes(); //creates a string from the byte array without specifying character encoding String s = new String(bytes); System.out.println(s); } catch(Exception e) { e.printStackTrace(); } } }
Sortir:
En utilisant l'encodage UTF-8
N'oubliez pas le codage des caractères lors de la conversion du tableau d'octets en chaîne. Puisque les octets sont les données binaires tandis que String est les données de caractères. Il est important de connaître l'encodage original du texte à partir duquel le tableau d'octets a été créé. Lorsque nous utilisons un codage de caractères différent, nous ne récupérons pas la chaîne d'origine.
Supposons que nous devions lire un tableau d'octets à partir d'un fichier codé en ' ISO_8859_1 '. Nous n'avons aucun codage de caractères lors de la conversion du tableau d'octets en chaîne. Nous convertissons un tableau d'octets en chaîne à l'aide du constructeur de classe String, mais cela ne garantit pas que nous récupérerons le même texte. C'est parce que le constructeur de la classe String utilise l'encodage par défaut de la plateforme.
Les octets contiennent 8 bits pouvant avoir jusqu'à 256 valeurs distinctes. Cela fonctionne pour le jeu de caractères ASCII, où seuls sept bits sont utilisés. Si les jeux de caractères ont plus de 256 valeurs, nous devons spécifier explicitement le codage qui indique comment coder les caractères dans une séquence d'octets.
Les jeux de caractères suivants pris en charge par la plate-forme Java sont :
- StandardCharsets.ISO_8859_1
- StandardCharsets.US_ASCII
- StandardCharsets.UTF_16
- StandardCharsets.UTF_16BE
- StandardCharsets.UTF_16LE
Lorsque nous ne nous souvenons pas de l’encodage exact, notre plateforme n’est pas en mesure de convertir correctement ces caractères spéciaux. Ce problème est résolu en fournissant ' UTF-8 ' comme encodage de caractères. Java fournit un autre constructeur surchargé dans la classe String qui accepte le codage de caractères.
new String(byte[], 'character encoding');
Exemple
Dans l'exemple suivant, nous avons utilisé StandardCharset.UTF_8 pour spécifier l'encodage.
import java.io.IOException; import java.nio.charset.StandardCharsets; public class ByteArraytoStringExample1 { public static void main(String[] args) { try { byte[] b = 'Morning'.getBytes(StandardCharsets.UTF_8); //byte array String string = new String(b, StandardCharsets.UTF_8); //string with 'UTF-8' encoding System.out.println(string); } catch(Exception e) { e.printStackTrace(); } } }
Sortir:
Exemple
Dans l'exemple suivant, nous avons pris char lors de la création du tableau d'octets. Cela fonctionne grâce à l'autoboxing. Le caractère 'T' est converti en 84 dans le tableau d'octets et ainsi de suite. C'est pourquoi la sortie des deux tableaux d'octets est la même.
public class ByteArraytoStringExample2 { public static void main(String[] args) { byte[] byteArray = { 'T', 'E', 'C', 'H', 'N', 'O','L','O','G','Y'}; //byte array of characters byte[] byteArray1 = { 84, 69, 67, 72, 78, 79, 76, 79, 71, 89}; //array of ASCII values String s = new String(byteArray); //converts byteArray to String String str = new String(byteArray1); System.out.println(s); System.out.println(str); } }
Sortir:
La classe String possède également un constructeur dans lequel nous pouvons passer un tableau d'octets et un jeu de caractères comme argument. Ainsi, l'instruction suivante peut également être utilisée pour convertir un tableau d'octets en chaîne en Java.
String str = new String(byteArray, StandardCharsets.UTF_8)
La classe String possède également un constructeur pour convertir un sous-ensemble du tableau d'octets en String.
chapiteau HTML
String(byte[] bytes, int offset, int length, String charsetName)
Voyons un autre exemple dans lequel un codage différent est utilisé.
Exemple
import java.io.UnsupportedEncodingException; public class ByteArraytoStringExample3 { public static void main(String args[]) { try { byte[] bytes = new byte[] { 75, 69, 82, 115, 121, 90, 43, 98, -30}; //bytes in ASCII code String utf = new String(bytes, 'UTF-8'); //converts into UTF-8 encoding String cp1252 = new String(bytes, 'Cp1252'); //conversts into Cp1252 endcoding //converts into windows-1252 encoding String windows1252 = new String(bytes, 'Windows-1252'); System.out.println('String in UTF-8 encoding : ' + utf); System.out.println('String in Cp1252 encoding : ' + cp1252); System.out.println('string Windows-1252 encoding : ' + windows1252); } catch(Exception e) { e.printStackTrace(); } } }
Sortir: