Wie konvertiere ich einen Java-String in ein ASCII Bytearray?
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.
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.
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);
String s = "ASCII Text";
byte[] bytes = s.getBytes("US-ASCII");
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");
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;
}
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
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);
}