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
.
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.
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.
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