Wie interpretiere ich die UTF-8-Repräsentation zu String in Java?

8

Gegeben folgender Code:

%Vor%

Stellt das JDK bereits einige Klassen dafür zur Verfügung? Gibt es eine Bibliothek, die das tut? (vorzugsweise unter maven)

Ich habe es mit ByteArrayOutputStream ohne Erfolg versucht.

    
Stephan 15.02.2012, 01:39
quelle

3 Antworten

3

Das funktioniert, aber nur mit ASCII. Wenn Sie Unicode-Zeichen außerhalb des ASCCI-Bereichs verwenden, werden Sie Probleme haben (da jedes Zeichen in ein Byte eingefügt wird, anstelle eines vollständigen Wortes, das von UTF-8 erlaubt wird). Sie können die folgende Typumwandlung durchführen, weil Sie wissen, dass das UTF-8 kein Byte überläuft, wenn Sie garantieren, dass die Eingabe im Grunde ASCII ist (wie Sie in Ihren Kommentaren erwähnen).

%Vor%

Hier ist eine andere Lösung, die das Problem behebt, nur mit ASCII-Zeichen zu arbeiten. Dies funktioniert mit allen Unicode-Zeichen im UTF-8-Bereich anstelle von ASCII nur in den ersten 8 Bits des Bereichs. Danke an dezeze für die Fragen. Sie haben mich dazu gebracht, mehr über das Problem und die Lösung nachzudenken.

%Vor%     
jmq 15.02.2012, 03:29
quelle
3

Erstens, versuchen Sie gerade, ein Zeichenfolgenliteral zu analysieren, oder wird tmp einige vom Benutzer eingegebene Daten sein?

Wenn dies ein String-Literal (d. h. eine hartcodierte Zeichenkette) sein soll, kann es unter Verwendung von Unicode-Escapes codiert werden. In Ihrem Fall bedeutet dies nur einzelne Backslashes statt doppelter Backslashes:

%Vor%

Wenn Sie jedoch die String-Parsing-Regeln von Java zum Parsen von Benutzereingaben verwenden müssen, könnte Apache Commons Lang ein guter Ausgangspunkt sein. StringEscapeUtils.unescapeJava () Methode.

    
prunge 15.02.2012 02:01
quelle
1

Ich bin mir sicher, dass muss ein besserer Weg sein muss, aber nur mit dem JDK:

%Vor%

verwendet java.util.Properties.load(java.io.Reader) um Backslash-Escapes zu verarbeiten (nach der ersten Verwendung von java.util.Properties.store(java.io.OutputStream, java.lang.String) , Backslash-Escape alles, was Probleme in einer properties-Datei verursachen würde, und dann replace("\\", "\") verwenden, um die Backslash-Escaping der ursprünglichen Backslashes umzukehren ).

(Disclaimer: Obwohl ich alle Fälle getestet habe, an die ich denken konnte, gibt es wahrscheinlich noch einige, an die ich nicht gedacht habe.)

    
ruakh 15.02.2012 02:22
quelle

Tags und Links