J'essaie de convertir un tableau d'octets en un String
et en l'écrivant dans un fichier en utilisant PrintWriter
(seulement pour vérifier sa valeur avec mc, j'ai besoin du contenu en String) Mon problème a résumé :Convertir un tableau d'octets en une chaîne
//-77 is "equivalent" to 179 or 0xb3 (i also tried those using ByteArrayOutputStream, where these are valid values)
byte[] b = new byte[]{0,0,1,-77};
//I save the String to a txt, so i can check its value with midnight commander
try( PrintWriter out = new PrintWriter("~/Desktop/output.txt")){
out.println(new String(b));
}
contenu de la sortie.txt comme hex avec mc: 00 00 01 EF | BF BD 0A
En dépit de ce devrait être: 00 00 01 B3
Quelles en sont les causes? Je suppose que c'est l'encodage, mais je ne sais pas quel type d'encodage devrais-je utiliser (j'ai essayé quelques types de Cp ###, mais aucun d'entre eux ne fonctionne à ce jour).
MISE À JOUR:
Chaque octet négatif converti en chaîne comme ceci résultera: EF BF BD
Il ne fonctionne que si la valeur d'octet non signé est inférieure à 128. La question est de savoir comment puis-je représenter un octet supérieur à 127 dans la chaîne comme je l'ai fait avec 0-127 octets?
Vous devriez probablement encoder les octets, plutôt que d'essayer de les utiliser comme s'il s'agissait d'une chaîne. Vous ne devez utiliser 'new String (byte [])' que lorsque le tableau byte est un encodage valide d'une chaîne. – RealSkeptic
HTTP peut gérer les octets. –
Votre tableau d'octets est peut-être signé. Essayez d'utiliser l'octet unigned []. – Pickle