web-dev-qa-db-fra.com

Convertir le caractère Unicode échappé en caractère réel

J'ai la valeur suivante dans une variable chaîne en Java qui a des caractères UTF-8 codés comme ci-dessous

Dodd\u2013Frank

au lieu de

Dodd–Frank

(Supposons que je n'ai pas le contrôle sur la façon dont cette valeur est affectée à cette variable chaîne)

Maintenant, comment puis-je le convertir (encoder) correctement et le stocker dans une variable String?

J'ai trouvé le code suivant

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

Mais ceci retourne un ByteBuffer, mais je veux un String de retour.

Modifier :

Quelques informations supplémentaires.

Quand j'utilise System.out.println(str); je reçois 

Dodd\u2013Frank

Je ne sais pas quelle est la bonne terminologie (UTF-8 ou Unicode). Pardonnez-moi pour cela.

26
Sudar

essayer 

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

de Apache Commons Lang

49
jlordo

Vous pouvez tirer parti du fait que Java.util.Properties prend en charge les chaînes avec des séquences d'échappement '\ uXXXX' et opère comme ceci:

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

Inélégant, mais fonctionnel.

14
drobert

Peut-être la solution suivante qui décode la chaîne correctement sans aucune dépendance supplémentaire.

Cela fonctionne dans un scala repl, mais devrait fonctionner aussi bien dans la solution Java que. 

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

Supposons que vous ayez une valeur Unicode, telle que 00B0 (symbole de degré ou indice «o», comme dans l’abréviation espagnole de «primero»).

Voici une fonction qui fait exactement ce que vous voulez:

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

    return ch.toString();
}
0
user6515422

J'ai utilisé StringEscapeUtils.unescapeXml pour extraire la chaîne chargée depuis une API qui donne un résultat XML.

0
Joy