Codage Java InputStream / jeu de caractères
Exécutant la commande suivante (exemple) code
import java.io.*;
public class test {
public static void main(String[] args) throws Exception {
byte[] buf = { -27};
InputStream is = new ByteArrayInputStream(buf);
BufferedReader r = new BufferedReader(
new InputStreamReader(is, "ISO-8859-1"));
String s = r.readLine();
System.out.println("test.java:9 [byte] (char)" + (char)s.getBytes()[0] +
" (int)" + (int)s.getBytes()[0]);
System.out.println("test.java:10 [char] (char)" + (char)s.charAt(0) +
" (int)" + (int)s.charAt(0));
System.out.println("test.java:11 string below");
System.out.println(s);
System.out.println("test.java:13 string above");
}
}
me donne cette sortie
test.java:9 [octet] (char)? (int)63 test.java:10 [char] (char)? (int)229 test.java:11 chaîne ci-dessous ? test.java:13 chaîne ci-dessus
Comment puis-je conserver la bonne valeur d'un octet (-27) dans la ligne 9 imprimé? Et, par conséquent, recevoir de la sortie attendue de la System.out.println(s)
de commande (å).
source d'informationauteur Tobbe
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez conserver octet valeurs, ne pas utiliser un Lecteur à tous, dans l'idéal. Pour représenter des données binaires arbitraires dans le texte et convertir des données binaires plus tard, vous devez utiliser base16 ou de l'encodage base64.
Cependant, pour expliquer ce qu'il se passe, lorsque vous appelez
s.getBytes()
c'est à l'aide de la par défaut encodage des caractères, qui, apparemment, ne comprend pas le caractère Unicode U+00E5.Si vous appelez
s.getBytes("ISO-8859-1")
partout au lieu des.getBytes()
je soupçonne que vous allez obtenir le droit d'octets de la valeur... mais en s'appuyant sur la norme ISO-8859-1 pour ce qui est kinda sale de l'OMI.Comme indiqué,
getBytes()
(sans arguments) utilise la plate-forme Java encodage par défaut, qui peut ne pas être en ISO-8859-1. Tout simplement l'impression qu'il devrait fonctionner, à condition que votre terminal et l'encodage par défaut de match et de soutenir le caractère. Par exemple, sur mon système, le terminal et Java par défaut l'encodage sont à la fois UTF-8. Le fait que vous voyez un"? " indique que le vôtre ne correspond pas ou å n'est pas pris en charge.Si vous souhaitez manuellement encoder en UTF-8 sur votre système, faites:
Il faut donner un tableau d'octets avec
{ -61, -91}
.