Comment puis-je convertir une chaîne internationale (par exemple russe) en \u
nombres (nombres unicode)
par exemple \u041e\u041a
pour OK
?
Réponses
Trop de publicités?Il existe un outil en ligne de commande fourni avec java appelé native2ascii . Cela convertit les fichiers unicode en fichiers encodés en ASCII. J'ai constaté que c'est une étape nécessaire pour générer des fichiers .properties pour la localisation.
Il existe une bibliothèque Java Open Source, MgntUtils, qui contient un utilitaire permettant de convertir les chaînes de caractères en séquence unicode et vice versa :
result = "Hello World";
result = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(result);
System.out.println(result);
result = StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString(result);
System.out.println(result);
La sortie de ce code est :
\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064
Hello World
La bibliothèque se trouve à l'adresse suivante Maven Central ou à Github Il est livré en tant qu'artefact maven et avec les sources et la javadoc.
Voici la javadoc de la classe StringUnicodeEncoderDecoder
Juste quelques méthodes de base pour cela (inspirées de l'outil native2ascii) :
/**
* Encode a String like äöü to \u00e4\u00f6\u00fc
*
* @param text
* @return
*/
public String native2ascii(String text) {
if (text == null)
return text;
StringBuilder sb = new StringBuilder();
for (char ch : text.toCharArray()) {
sb.append(native2ascii(ch));
}
return sb.toString();
}
/**
* Encode a Character like ä to \u00e4
*
* @param ch
* @return
*/
public String native2ascii(char ch) {
if (ch > '\u007f') {
StringBuilder sb = new StringBuilder();
// write \udddd
sb.append("\\u");
StringBuffer hex = new StringBuffer(Integer.toHexString(ch));
hex.reverse();
int length = 4 - hex.length();
for (int j = 0; j < length; j++) {
hex.append('0');
}
for (int j = 0; j < 4; j++) {
sb.append(hex.charAt(3 - j));
}
return sb.toString();
} else {
return Character.toString(ch);
}
}