Comment convertir une chaîne Java en un tableau d'octets ASCII?
Réponses
Trop de publicités?Si vous êtes à la goyave 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.
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);
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.
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");