web-dev-qa-db-fra.com

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

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

67
farm ostrich

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

Exemple:

String s = "Hello, there.";
byte[] b = s.getBytes(StandardCharsets.US_ASCII);

(Avant Java 7: byte[] b = s.getBytes("US-ASCII");)

137

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.

21
Tomasz Nurkiewicz

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.

5
Arnout Engelen

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);
5
Jörn Horstmann
String s = "ASCII Text";
byte[] bytes = s.getBytes("US-ASCII");
4
Babar

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");
4
dain

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;
  }
2
thpitsch

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

0
Abdulmateen Ch.

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);
   }
0
agiles