2009-10-14 9 views
3

Cela peut être une question stupide, mais ... Dites que j'ai un String comme 4e59 qui représente un caractère spécial Unicode. Comment puis-je ajouter le \u au début de ce caractère pour qu'il s'affiche correctement? J'ai essayé la solution la plus simple de:Java unicode question

String str = "4e59"; 
System.out.println("\\u"+str); 

Et plusieurs autres variantes, qu'est-ce qui me manque?

Répondre

9

Le \ u est analysé au moment de la compilation, exécutez pas le temps, donc juste préfixer votre chaîne avec « \ u » ne va pas travailler.

Vous pouvez utiliser Integer.parseInt pour faire l'analyse à l'exécution:

System.out.println((char)Integer.parseInt("4e59", 16)); 
+2

Dans le cas où Brandon était intéressé, cela fonctionne également: char c = 0x4E59; – Gunslinger47

4

Vous devez le convertir en un char:

System.out.println((char) Integer.parseInt("4e59", 16)); 
+0

Integer.valueOf() retourne un objet entier, qui doit ensuite être converti en un int, (puis dans un char), ce qui est un peu étranger. Integer.parseInt() renvoie un int directement – newacct

+0

C'est vrai. J'ai changé ma réponse. –

5

D'autres ont déjà répondu à la façon de le faire, mais si vous êtes intéressé je peux expliquer pourquoi préfixer "\u" ne fonctionne pas : les séquences "\uXXXX" sont converties au caractère unicode correspondant au moment de la compilation par javac (par le lexer, qui est la première étape de la compilation, en fait). Dans votre code, le lexer voit une chaîne contenant seulement "\u" et ne le touche donc pas.

Le codage \uXXXX fonctionnera n'importe où, pas seulement à l'intérieur des chaînes. Ces deux lignes sont identiques si vous les mettez dans un fichier source Java:

int i; 

\u0069\u006E\u0074 \u0069\u003B 
+0

Sainte mère de vache !!! – Amarghosh