web-dev-qa-db-fra.com

Comment convertir un tableau d'octets en chaîne en Java?

Comment puis-je convertir un tableau de bytes en String sans conversion?.

J'ai essayé:

  String doc=new String( bytes);

Mais le fichier doc n'est pas le même que les octets (les octets sont informations binaires). Par exemple:

  String doc=new String( bytes);
  byte[] bytes2=doc.getBytes();

bytes et bytes2 sont différents.

PS: UTF-8 Ne fonctionne pas car il convertit certains octets en différentes valeurs. J'ai testé et ça ne marche pas.

PS2: Et non, je ne veux pas BASE64.

18
magallanes

Vous devez spécifier l'encodage que vous souhaitez, par exemple pour UTF-8

String doc = ....
byte[] bytes = doc.getBytes("UTF-8");
String doc2 = new String(bytes, "UTF-8");

doc et doc2 sera pareil.

Pour décoder un byte[] vous devez savoir quel encodage a été utilisé pour être sûr qu'il décodera correctement.

16
Peter Lawrey

Voici une façon de convertir un tableau d'octets en String et inversement:

String doc=new String(bytes, "ISO-8859-1");
byte[] bytes2=doc.getBytes("ISO-8859-1");

Un String est une séquence de caractères, vous devrez donc en quelque sorte coder les octets en caractères. Le ISO-8859-1 l'encodage mappe un caractère unique et unique pour chaque octet, il est donc sûr de l'utiliser pour la conversion. Notez que d'autres encodages, tels que UTF-8, ne sont pas sûrs dans ce sens car il existe des séquences d'octets qui ne correspondent pas à des chaînes valides dans ces encodages.

13
Joni

La "conversion appropriée" entre l'octet [] et la chaîne consiste à indiquer explicitement l'encodage que vous souhaitez utiliser. Si vous commencez par un octet [] et qu'il ne contient en fait pas de données texte, il n'y a pas de "conversion appropriée". Les chaînes sont pour le texte, l'octet [] est pour les données binaires, et la seule chose vraiment sensée à faire est d'éviter de convertir entre elles à moins que vous ne deviez absolument le faire.

Si vous devez vraiment utiliser une chaîne pour contenir des données binaires, le moyen le plus sûr est d'utiliser le codage Base64 .

Source par Michael Borgwardt

1
Stephan