128 votes

Créer un caractère Unicode à partir de son numéro

Je veux afficher un caractère Unicode dans Java. Si je fais cela, il fonctionne très bien:

String symbol = "\u2202";

le symbole est égal à "∂". C'est ce que je veux.

Le problème c'est que je connais le numéro Unicode et le besoin de créer de l'Unicode, le symbole des qui. J'ai essayé (pour moi) la chose la plus évidente:

int c = 2202;
String symbol =  "\\u" + c;

Toutefois, dans ce cas, le symbole est égal à "\u2202". Ce n'est pas ce que je veux.

Comment puis-je construire le symbole si je connais son numéro Unicode (mais seulement au moment de l'exécution---je ne peux pas coder en dur dans comme dans le premier exemple)?

134voto

McDowell Points 62645

Si vous souhaitez obtenir une unité de code codé UTF-16 sous forme de char , vous pouvez analyser le nombre entier et le transtyper comme d'autres l'ont suggéré.

Si vous souhaitez prendre en charge tous les points de code, utilisez Character.toChars(int) . Ceci gérera les cas où les points de code ne peuvent pas tenir dans une seule valeur char .

80voto

dty Points 11383

Il suffit de lancer votre int sur un char . Vous pouvez convertir cela en String utilisant Character.toString() :

 String s = Character.toString((char)c);
 

MODIFIER:

Rappelez-vous simplement que les séquences d'échappement dans le code source Java (les \u bits) sont dans HEX. Si vous essayez de reproduire une séquence d'échappement, vous aurez besoin de quelque chose comme int c = 0x2202 .

25voto

eis Points 14687

Les autres réponses ici, soit uniquement en charge les caractères unicode jusqu'à U+FFFF (les réponses de traiter qu'avec une seule instance de char) ou de ne pas dire comment aller à la véritable symbole (les réponses s'arrêtant au niveau du Caractère.toChars() ou de l'utilisation incorrecte de la méthode après), afin d'ajouter ma réponse ici, trop.

Pour un soutien supplémentaire de points de code aussi, c'est ce qui doit être fait:

// this character:
// http://www.isthisthingon.org/unicode/index.php?page=1F&subpage=4&glyph=1F495
// using code points here, not U+n notation
// for equivalence with U+n, below would be 0xnnnn
int codePoint = 128149;
// converting to char[] pair
char[] charPair = Character.toChars(codePoint);
// and to String, containing the character we want
String symbol = new String(charPair);

// we now have str with the desired character as the first item
// confirm that we indeed have character with code point 128149
System.out.println("First code point: " + symbol.codePointAt(0));

J'ai aussi fait un test rapide pour la transformation des méthodes de travail et qui n'ont pas

int codePoint = 128149;
char[] charPair = Character.toChars(codePoint);

String str = new String(charPair, 0, 2);
System.out.println("First code point: " + str.codePointAt(0));    // 128149, worked
String str2 = charPair.toString();
System.out.println("Second code point: " + str2.codePointAt(0));  // 91, didn't work
String str3 = new String(charPair);
System.out.println("Third code point: " + str3.codePointAt(0));   // 128149, worked
String str4 = String.valueOf(code);
System.out.println("Fourth code point: " + str4.codePointAt(0));  // 49, didn't work
String str5 = new String(new int[] {codePoint}, 0, 1);
System.out.println("Fifth code point: " + str5.codePointAt(0));   // 128149, worked

6voto

ILMTitan Points 5095

Rappelez-vous que char est un type intégral, et peut donc recevoir une valeur entière, ainsi qu'une constante char.

 char c = 0x2202;//aka 8706 in decimal. \u codepoints are in hex.
String s = String.valueOf(c);
 

2voto

Paul Reiners Points 3484

Voici comment vous le faites:

 int cc = 2202;
char ccc = (char) Integer.parseInt(String.valueOf(cc), 16);
final String text = String.valueOf(ccc);
 

Cette solution est de Arne Vajhøj.

Prograide.com

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.

Powered by:

X