Dadurch werden nicht zuordnungsfähige Zeichen wie '\ u00e0' (& agrave;) in '?' Konvertiert. Es wäre schöner, eine Methode zu haben, die das in 'a' umwandelt.
Arnout Engelen
11
Verwenden Sie für Benutzer von Java 7 oder höher die Klasse StandardCharsets, die einige Konstanten für Standardzeichensätze enthält. byte[] b = s.getBytes(StandardCharsets.US_ASCII);
Alexis C.
23
Wenn du eine ... bist GuaveBenutzer gibt es eine handliche CharsetsKlasse:
String s = "Hello, world!";
byte[] b = s.getBytes(Charsets.US_ASCII);
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:
Wenn ja, können Sie mir bitte sagen, wie es sein kann, dass ein hebräischer Buchstabe 1 Byte (ASCII-Codierung) enthält und nicht einmal im ASCII vorhanden ist. und es verwendet keine Standardcodierung, da ich manuell angegeben habe. i.stack.imgur.com/5WPD3.jpg
Royi Namir
@RoyiNamir: Dies könnte besser als neue Frage veröffentlicht werden, aber der Grund ist, dass Zeichen in US-ASCII nicht codierbar sind und die 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).
Jörn Horstmann
5
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.
Das ist eigentlich ein ziemlich guter Tipp! Unter Android funktioniert getBytes (...) auch auf ICS + NICHT richtig
seltsam
Ich kann EncodingUtils nirgendwo finden?
siehe
1
@behelit Wenn Sie meinem Link folgen, wird zu diesem Bit weitergeleitet: developer.android.com/about/versions/marshmallow/… Grundsätzlich müssen Sie die Apache-HTTP-Bibliothek manuell einschließen, da sie jetzt veraltet ist.
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 stringbyte[] dataset = newbyte[len];
for (int i = 0; i < len; ++i) {
char c = mString.charAt(i);
dataset[i]= (byte) c;
}
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 vomCharset
Typ (nichtString
), sodass Sie vermeiden, dassUnsupportedEncodingException
er nur vonString.getBytes(String)
, aber nicht von geworfen wirdString.getBytes(Charset)
.In Java 7 gibt es eine entsprechende
StandardCharsets
Klasse.quelle
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);
quelle
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.
quelle
String s = "ASCII Text"; byte[] bytes = s.getBytes("US-ASCII");
quelle
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");
quelle
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; }
quelle
Konvertieren Sie einen String 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); }
quelle
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
quelle
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(); } } }
quelle