Comment convertir une chaîne Java en un tableau d'octets ASCII?
Si vous êtes un utilisateur goyave , il existe un utilitaire Charsets
class:
String s = "Hello, world!";
byte[] b = s.getBytes(Charsets.US_ASCII);
Mis à part le fait de ne pas coder en dur un nom de jeu de caractères arbitraire dans votre code source, il a un avantage beaucoup plus important: Charsets.US_ASCII
est de type Charset
(pas String
), vous évitez donc de cocher UnsupportedEncodingException
jeté uniquement de String.getBytes(String)
, mais pas de String.getBytes(Charset)
.
En Java 7, il existe un équivalent StandardCharsets
class.
Le problème avec les autres solutions proposées est qu’elles suppriment les caractères ne pouvant pas être mappés directement en ASCII ou les remplacent par un caractère de marqueur tel que ?
.
Vous voudrez peut-être, par exemple, convertir les caractères accentués en ce même caractère sans accent. Il existe plusieurs astuces pour le faire (notamment construire une table de mappage statique ou tirer parti de la «normalisation» existante définie pour Unicode), mais ces méthodes sont loin d'être complètes.
Votre meilleur choix consiste à utiliser la bibliothèque junidecode , qui ne peut pas être complète non plus, mais qui incorpore beaucoup d’expérience dans la manière la plus rationnelle de translittérer Unicode en ASCII.
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);
String s = "ASCII Text";
byte[] bytes = s.getBytes("US-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");
J'ai dans ma chaîne des caractères thaïlandais (codés TIS620) et des trémas allemands. La réponse de agiles m'a mis sur le droit chemin. Au lieu de .getBytes () j'utilise maintenant
int len = mString.length(); // Length of the string
byte[] dataset = new byte[len];
for (int i = 0; i < len; ++i) {
char c = mString.charAt(i);
dataset[i]= (byte) c;
}
J'ai trouvé la solution. En réalité, la classe Base64 n'est pas disponible dans Android. Le lien est donné ci-dessous pour plus d'informations.
byte[] byteArray;
byteArray= json.getBytes(StandardCharsets.US_ASCII);
String encoded=Base64.encodeBytes(byteArray);
userLogin(encoded);
Voici le lien pour la classe Base64: http://androidcodemonkey.blogspot.com/2010/03/how-to-base64-encode-decode-Android.html
Convertit une chaîne en valeurs ascii.
String test = "ABCD";
for ( int i = 0; i < test.length(); ++i ) {
char c = test.charAt( i );
int j = (int) c;
System.out.println(j);
}