Wie konvertiere ich einen Java-String in ein ASCII-Byte-Array?
Wie konvertiere ich einen Java-String in ein ASCII-Byte-Array?
Antworten:
byte[] b = s.getBytes(StandardCharsets.US_ASCII);
Wenn du eine ... bist GuaveBenutzer gibt es eine handliche Charsets
Klasse:
String s = "Hello, world!";
byte[] b = s.getBytes(Charsets.US_ASCII);
Abgesehen davon, dass ein beliebiger Zeichensatzname in Ihrem Quellcode nicht fest codiert ist, hat er einen viel größeren Vorteil: Er Charsets.US_ASCII
ist vom Charset
Typ (nicht String
), sodass Sie vermeiden, dass UnsupportedEncodingException
er nur von String.getBytes(String)
, aber nicht von geworfen wird String.getBytes(Charset)
.
In Java 7 gibt es eine entsprechende StandardCharsets
Klasse.
String.getBytes(Charset)
wurde erst API 9 hinzugefügt :( Wenn Sie also auf Froyo und höher abzielen möchten, können Sie das nicht tun.
Der Code, den Sie ausprobiert 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 Zeichenfolgenklasse aufzurufen, die nicht vorhanden ist. Stattdessen müssen Sie die Methode für Ihre Zeichenfolgeninstanz aufrufen:
byte[] bytes = string.getBytes(characterSet);
getBytes(Charset)
Methode angegeben wird, um Zeichen zu ersetzen, die nicht codiert werden können. Bei US-ASCII ist dieses Ersatzzeichen das Fragezeichen, sodass Ihr Bytearray ein Element mit dem ASCII-Wert '?' Enthält. (63).
Das Problem bei anderen vorgeschlagenen Lösungen 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 ohne Akzent in dasselbe Zeichen konvertieren lassen. Hierfür gibt es einige Tricks (einschließlich der Erstellung einer statischen Zuordnungstabelle selbst oder der Nutzung der für Unicode definierten vorhandenen "Normalisierung"), aber diese Methoden sind bei weitem nicht vollständig.
Am besten verwenden Sie die Junidecode- Bibliothek, die ebenfalls nicht vollständig sein kann, aber viel Erfahrung in der vernünftigsten Art der Übersetzung von Unicode in ASCII beinhaltet.
Wenn Sie dies in Android benötigen und es mit älteren Versionen als FroYo verwenden möchten, können Sie auch EncodingUtils.getAsciiBytes () verwenden :
byte[] bytes = EncodingUtils.getAsciiBytes("ASCII Text");
In meiner Zeichenfolge habe ich thailändische 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. Tatsächlich 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 ist der Link für die Base64-Klasse: http://androidcodemonkey.blogspot.com/2010/03/how-to-base64-encode-decode-android.html
Versuche dies:
/**
* @(#)demo1.java
*
*
* @author
* @version 1.00 2012/8/30
*/
import java.util.*;
public class demo1
{
Scanner s=new Scanner(System.in);
String str;
int key;
void getdata()
{
System.out.println ("plase enter a string");
str=s.next();
System.out.println ("plase enter a key");
key=s.nextInt();
}
void display()
{
char a;
int j;
for ( int i = 0; i < str.length(); ++i )
{
char c = str.charAt( i );
j = (int) c + key;
a= (char) j;
System.out.print(a);
}
public static void main(String[] args)
{
demo1 obj=new demo1();
obj.getdata();
obj.display();
}
}
}