wake-up-neo.net

So konvertieren Sie einen Java-String in einen ASCII Byte-Array?

Wie konvertiere ich einen Java-String in ein ASCII Bytearray?

67
farm ostrich

Verwenden Sie die Methode getBytes , und geben Sie den entsprechenden Namen Charset (oder Charset) an.

Beispiel:

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

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

Wenn Sie ein Guaven Benutzer sind, gibt es eine praktische Charsets Klasse:

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

Abgesehen davon, dass Sie einen beliebigen Zeichensatznamen in Ihrem Quellcode nicht hart codieren, hat dies einen viel größeren Vorteil: Charsets.US_ASCII ist vom Typ Charset (nicht String) ) so vermeiden Sie überprüft UnsupportedEncodingException ausgelöst nur von String.getBytes(String) , aber nicht von String.getBytes(Charset) .

In Java 7 gibt es eine äquivalente StandardCharsets Klasse.

22

Das Problem bei anderen Lösungsvorschlägen besteht darin, dass sie entweder Zeichen löschen, die nicht direkt ASCII zugeordnet werden können, oder sie durch ein Markierungszeichen wie ? ersetzen. 

Möglicherweise möchten Sie beispielsweise Zeichen mit Akzent in diesen Buchstaben ohne Akzent konvertieren lassen. Dazu gibt es ein paar Tricks (z. B. das Erstellen einer statischen Mapping-Tabelle oder die Nutzung der für Unicode definierten 'Normalisierung'). Diese Methoden sind jedoch noch lange nicht abgeschlossen.

Ihre beste Wette ist die Verwendung der junidecode - Bibliothek, die ebenfalls nicht vollständig sein kann, aber viel Erfahrung in die vernünftigste Art und Weise einschließt, Unicode in ASCII zu transliterieren.

5
Arnout Engelen

Der Code, den Sie versucht haben, enthält nur ein falsches Zeichen:

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

Beachten Sie den Großbuchstaben "String". Dadurch wird versucht, eine statische Methode für die nicht vorhandene String-Klasse aufzurufen. Stattdessen müssen Sie die Methode in Ihrer String-Instanz aufrufen:

byte[] bytes = string.getBytes(characterSet);
5
Jörn Horstmann
String s = "ASCII Text";
byte[] bytes = s.getBytes("US-ASCII");
4
Babar

Wenn Sie dies in Android benötigen und es mit etwas älterem als FroYo funktionieren lassen möchten, können Sie auch EncodingUtils.getAsciiBytes () verwenden:

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

In meiner Zeichenfolge habe ich Thai-Zeichen (TIS620-codiert) und deutsche Umlaute. Die Antwort von Agiles brachte mich auf den richtigen Weg. Anstelle von .getBytes () verwende ich jetzt

  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

Ich habe die Lösung gefunden. Eigentlich ist die Base64-Klasse in Android nicht verfügbar. Der Link ist unten für weitere Informationen angegeben.

byte[] byteArray;                                                  
     byteArray= json.getBytes(StandardCharsets.US_ASCII);
    String encoded=Base64.encodeBytes(byteArray);
    userLogin(encoded);

Hier der Link zur Base64-Klasse: http://androidcodemonkey.blogspot.com/2010/03/how-to-base64-encode-decode-Android.html

0
Abdulmateen Ch.

Konvertieren Sie die Zeichenfolge in ASCII-Werte.

   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