In Java habe ich einen String und möchte ihn als Byte-Array codieren (in UTF8 oder einer anderen Codierung). Alternativ habe ich ein Byte-Array (in einer bekannten Codierung) und möchte es in einen Java-String konvertieren. Wie mache ich diese Konvertierungen?
java
string
encoding
character-encoding
mcherm
quelle
quelle
Hier ist eine Lösung, die es vermeidet, die Zeichensatzsuche für jede Konvertierung durchzuführen:
quelle
StandardCharsets.UTF_8
für einen konstanten Zugriff auf den UTF-8-Zeichensatz verwenden.quelle
Sie können direkt über den Konstruktor String (byte [], String) und die Methode getBytes (String) konvertieren. Java macht verfügbare Zeichensätze über die Charset- Klasse verfügbar . In der JDK-Dokumentation sind die unterstützten Codierungen aufgeführt .
In 90% der Fälle werden solche Konvertierungen in Streams durchgeführt, sodass Sie die Reader / Writer- Klassen verwenden würden. Sie würden nicht schrittweise mit den String-Methoden für beliebige Byte-Streams dekodieren - Sie würden sich für Fehler mit Multibyte-Zeichen offen lassen.
quelle
UTF-8
, was ist das Problem in Bezug auf Multibyte-Zeichen?Meine Tomcat7-Implementierung akzeptiert Zeichenfolgen als ISO-8859-1. trotz des Inhaltstyps der HTTP-Anfrage. Die folgende Lösung hat bei mir funktioniert, als ich versucht habe, Zeichen wie 'é' richtig zu interpretieren.
Beim Versuch, die Zeichenfolge als US-ASCII zu interpretieren, wurden die Byteinformationen nicht korrekt interpretiert.
quelle
StandardCharSets.UTF_8
und verwendenStandardCharSets.ISO_8859_1
.Alternativ können StringUtils von Apache Commons verwendet werden.
oder
Wenn Sie einen nicht standardmäßigen Zeichensatz haben, können Sie getBytesUnchecked () oder newString () entsprechend verwenden.
quelle
Zum Dekodieren einer Reihe von Bytes in eine normale Zeichenfolgennachricht habe ich es endlich mit der UTF-8-Codierung mit diesem Code zum Laufen gebracht:
quelle
Wenn Sie 7-Bit-ASCII oder ISO-8859-1 (ein erstaunlich verbreitetes Format) verwenden, müssen Sie keinen neuen java.lang.String erstellen . Es ist viel viel performanter, das Byte einfach in char umzuwandeln:
Vollständiges Arbeitsbeispiel:
Wenn Sie nicht mit extended-Zeichen wie Ä, Æ, A, C, I, E und können sicher sein , dass die einzigen übertragenen Werte sind von den ersten 128 Unicode - Zeichen, dann wird dieser Code auch Arbeit für UTF-8 und erweiterten ASCII (wie cp-1252).
quelle
Ich kann nicht kommentieren, möchte aber keinen neuen Thread starten. Aber das funktioniert nicht. Eine einfache Rundreise:
Ich würde b [] dasselbe Array vor und nach der Codierung benötigen, was es nicht ist (dies bezieht sich auf die erste Antwort).
quelle
quelle
quelle
quelle
schrecklich spät, aber ich bin gerade auf dieses Problem gestoßen und dies ist meine Lösung:
quelle