86 votes

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

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

162voto

En utilisant la méthode getBytes , en lui donnant le nom approprié Charset (ou Charset ).

Exemple:

 String s = "Hello, there.";
byte[] b = s.getBytes("US-ASCII");
 

23voto

Tomasz Nurkiewicz Points 140462

Si vous êtes de l'utilisateur il y a une pratique Charsets classe:

String s = "Hello, world!";
byte[] b = s.getBytes(Charsets.US_ASCII);

En dehors de ne pas coder en dur arbitraire charset nom dans votre code source, il a un gros avantage: Charsets.US_ASCII est Charset type (non String), de manière à éviter vérifié UnsupportedEncodingException levée uniquement à partir d' String.getBytes(String), mais pas à partir d' String.getBytes(Charset).

Dans Java 7, il est équivalent StandardCharsets classe.

5voto

Jörn Horstmann Points 18118

Le code que vous avez essayé ne contient qu'un seul caractère incorrect:

 Charset characterSet = Charset.forName("US-ASCII");
String string = "Wazzup";
byte[] bytes = String.getBytes(characterSet);
               ^
 

Notez la majuscule "String". Cela tente d'appeler une méthode statique sur la classe string, qui n'existe pas. Au lieu de cela, vous devez invoquer la méthode sur votre instance de chaîne:

 byte[] bytes = string.getBytes(characterSet);
 

5voto

Arnout Engelen Points 2106

Le problème avec les autres solutions proposées, c'est qu'ils soit en baisse de caractères qui ne peuvent pas être directement mappés à des ASCII, ou de les remplacer par un marqueur de caractère comme ?.

Vous pourriez désir d'avoir par exemple des caractères accentués converti à cette même personnage sans l'accent. Il ya une couple de trucs à faire (y compris la construction d'un mappage statique table vous-même ou existantes de "normalisation" n'est pas définie pour unicode), mais ces méthodes sont loin d'être complètes.

Votre meilleur pari est d'utiliser le junidecode de la bibliothèque, qui ne peut pas être complète, mais intègre beaucoup d'expérience, dans la plupart façon saine de transliterating Unicode en ASCII.

4voto

dain Points 4393

Si vous en avez besoin dans Android et souhaitez le faire fonctionner avec tout ce qui est plus ancien que FroYo, vous pouvez également utiliser EncodingUtils.getAsciiBytes () :

 byte[] bytes = EncodingUtils.getAsciiBytes("ASCII Text");
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X