it-swarm.com.de

Konvertieren Sie das maskierte Unicode-Zeichen wieder in das tatsächliche Zeichen

Ich habe den folgenden Wert in einer String-Variablen in Java, die UTF-8-Zeichen enthält, die wie unten codiert sind

Dodd\u2013Frank

anstatt

Dodd–Frank

(Angenommen, ich habe keine Kontrolle darüber, wie dieser Wert dieser Zeichenfolgenvariablen zugewiesen wird.)

Wie konvertiere (verschlüssle) ich es nun richtig und speichere es in einer Variablen String zurück?

Ich habe den folgenden Code gefunden

Charset.forName("UTF-8").encode(str);

Dies gibt jedoch eine ByteBuffer zurück, aber ich möchte eine String zurück.

Bearbeiten :

Weitere zusätzliche Informationen.

Wenn ich System.out.println(str); benutze, bekomme ich 

Dodd\u2013Frank

Ich bin nicht sicher, was die korrekte Terminologie ist (UTF-8 oder Unicode). Verzeihen Sie mir dafür.

26
Sudar

versuchen 

str = org.Apache.commons.lang3.StringEscapeUtils.unescapeJava(str);

von Apache Commons Lang

49
jlordo

Sie können die Tatsache nutzen, dass Java.util.Properties Zeichenfolgen mit Escape-Sequenzen '\ uXXXX' unterstützt. Gehen Sie dabei folgendermaßen vor:

Properties p = new Properties();
p.load(new StringReader("key="+yourInputString));
System.out.println("Escaped value: " + p.getProperty("key"));

Unelegant, aber funktionell.

14
drobert

Vielleicht die folgende Lösung, die den String ohne zusätzliche Abhängigkeiten korrekt decodiert.

Dies funktioniert in einer Scala-Replik, sollte aber nur in Java-Lösung funktionieren. 

import Java.nio.charset.StandardCharsets
import Java.nio.charset.Charset

> StandardCharsets.UTF_8.decode(Charset.forName("UTF-8").encode("Dodd\u2013Frank"))
res: Java.nio.CharBuffer = Dodd–Frank
2
cevaris

Angenommen, Sie haben einen Unicode-Wert wie 00B0 (Gradzeichen oder hochgestelltes "o", wie in spanischer Abkürzung für "primero")

Hier ist eine Funktion, die genau das macht, was Sie wollen:

public static String  unicodeToString( char  charValue )
{
    Character   ch = new Character( charValue );

    return ch.toString();
}
0
user6515422

Ich habe StringEscapeUtils.unescapeXml verwendet, um die Zeichenfolge aus einer API zu löschen, die ein XML-Ergebnis liefert.

0
Joy