Comment puis-je convertir une chaîne internationale (par exemple russe) en \u
nombres (nombres unicode)
par exemple \u041e\u041a
pour OK
?
Il semble que cette méthode ait été renommée escapeJava
dans les versions 3.x
Comment puis-je convertir une chaîne internationale (par exemple russe) en \u
nombres (nombres unicode)
par exemple \u041e\u041a
pour OK
?
Il existe un Outils JDK exécuté via la ligne de commande comme suit :
native2ascii -encoding utf8 src.txt output.txt
Exemple :
src.txt
بسم الله الرحمن الرحيم
output.txt
\u0628\u0633\u0645 \u0627\u0644\u0644\u0647 \u0627\u0644\u0631\u062d\u0645\u0646 \u0627\u0644\u0631\u062d\u064a\u0645
Si vous voulez l'utiliser dans votre application Java, vous pouvez envelopper cette ligne de commande par :
String pathSrc = "./tmp/src.txt";
String pathOut = "./tmp/output.txt";
String cmdLine = "native2ascii -encoding utf8 " + new File(pathSrc).getAbsolutePath() + " " + new File(pathOut).getAbsolutePath();
Runtime.getRuntime().exec(cmdLine);
System.out.println("THE END");
Puis lire le contenu du nouveau fichier.
Vous feriez mieux de ne pas l'utiliser ;) Voir la réponse à : stackoverflow.com/a/4298836/115493
J'ai également eu ce problème. J'avais du texte portugais avec des caractères spéciaux, mais ces caractères étaient déjà au format unicode (ex.. : \u00e3
).
Je veux donc convertir S\u00e3o
à São
.
Je l'ai fait en utilisant l'apache commons StringEscapeUtils . Comme l'a dit @sorin-sbarnea. Peut être téléchargé aquí .
Utilisez la méthode unescapeJava
comme ceci :
String text = "S\u00e3o"
text = StringEscapeUtils.unescapeJava(text);
System.out.println("text " + text);
(Il existe également la méthode escapeJava
mais celui-ci met les caractères unicode dans la chaîne).
Si quelqu'un connaît une solution en Java pur, merci de nous le dire.
Voici une version améliorée de La réponse de ArtB :
StringBuilder b = new StringBuilder();
for (char c : input.toCharArray()) {
if (c >= 128)
b.append("\\u").append(String.format("%04X", (int) c));
else
b.append(c);
}
return b.toString();
Cette version échappe tous les caractères non ASCII et fonctionne correctement pour les points de code Unicode bas comme Ä
.
La réponse comporte trois parties
Pour obtenir chaque caractère, vous pouvez itérer dans la chaîne en utilisant la fonction charAt()
ou [toCharArray()
](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#toCharArray()) méthodes.
for( char c : s.toCharArray() )
La valeur du caractère est la valeur Unicode.
Le site Cyrillique Unicode Les caractères sont tous les caractères des plages suivantes :
Cyrillic: U+0400–U+04FF ( 1024 - 1279)
Cyrillic Supplement: U+0500–U+052F ( 1280 - 1327)
Cyrillic Extended-A: U+2DE0–U+2DFF (11744 - 11775)
Cyrillic Extended-B: U+A640–U+A69F (42560 - 42655)
S'il se trouve dans cette fourchette, il s'agit d'un cyrillique. Il suffit d'effectuer une vérification if. S'il est dans l'intervalle, utilisez Integer.toHexString()
et faire précéder le "\\u"
. Mis ensemble, cela devrait ressembler à quelque chose comme ceci :
final int[][] ranges = new int[][]{
{ 1024, 1279 },
{ 1280, 1327 },
{ 11744, 11775 },
{ 42560, 42655 },
};
StringBuilder b = new StringBuilder();
for( char c : s.toCharArray() ){
int[] insideRange = null;
for( int[] range : ranges ){
if( range[0] <= c && c <= range[1] ){
insideRange = range;
break;
}
}
if( insideRange != null ){
b.append( "\\u" ).append( Integer.toHexString(c) );
}else{
b.append( c );
}
}
return b.toString();
Edita: devrait probablement faire le chèque c < 128
et inverser le if
et le else
corps ; vous probablement doit échapper à tout ce qui n'est pas ASCII. J'ai probablement été trop littéral dans ma lecture de votre question.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.