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.
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.
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
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();
}
J'ai utilisé StringEscapeUtils.unescapeXml
pour extraire la chaîne chargée depuis une API qui donne un résultat XML.