Je souhaite afficher un caractère Unicode en Java. Si je fais cela, cela fonctionne très bien:
String symbol = "\u2202";
le symbole est égal à "∂". C'est ce que je veux.
Le problème est que je connais le numéro Unicode et que je dois créer le symbole Unicode à partir de cela. J'ai essayé (pour moi) la chose évidente:
int c = 2202;
String symbol = "\\u" + c;
Cependant, 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 le coder en dur comme le premier exemple)?
Réponses:
Il suffit de lancer votre fichier
int
sur un fichierchar
. Vous pouvez convertir cela en uneString
utilisationCharacter.toString()
:ÉDITER:
N'oubliez pas que les séquences d'échappement dans le code source Java (les
\u
bits) sont en HEX, donc si vous essayez de reproduire une séquence d'échappement, vous aurez besoin de quelque chose commeint c = 0x2202
.la source
c
est inférieure à 0x10000, sinon cette approche se cassera horriblement.Java chars go up to 0xFFFF
. Je ne savais pas ça.Si vous souhaitez obtenir une unité de code encodée en UTF-16 en tant que
char
, vous pouvez analyser l'entier et le convertir comme d'autres l'ont suggéré.Si vous souhaitez prendre en charge tous les points de code, utilisez
Character.toChars(int)
. Cela gérera les cas où les points de code ne peuvent pas tenir dans une seulechar
valeur.Doc dit:
la source
char
.scala> "👨🎨".map(_.toInt).flatMap((i: Int) => Character.toChars(i)).map(_.toHexString)
donneres11: scala.collection.immutable.IndexedSeq[String] = Vector(f468, 200d, f3a8)
Cet emoji, "chanteur masculin", est adressé avec les trois points de codeU+1f468
,U+200d
etU+1f3a8
. Le chiffre le plus significatif est manquant. Je peux l'ajouter avec un OU au niveau du bit ( stackoverflow.com/a/2220476/1007926 ), mais je ne sais pas comment déterminer quels caractères analysés ont été tronqués. Merci!Les autres réponses ici ne prennent en charge que l'unicode jusqu'à U + FFFF (les réponses ne traitant qu'une seule instance de char) ou ne disent pas comment accéder au symbole réel (les réponses s'arrêtant à Character.toChars () ou en utilisant une méthode incorrecte après cela), donc en ajoutant ma réponse ici aussi.
Pour prendre en charge également les points de code supplémentaires, voici ce qui doit être fait:
J'ai également fait un test rapide pour savoir quelles méthodes de conversion fonctionnent et lesquelles ne fonctionnent pas
la source
new String(Character.toChars(121849));
casse dans la console Eclipse, mais la version à trois lignes fonctionne.str4
devoir, ne devrait pascode
être à lacodePoint
place?Rappelez-vous qu'il
char
s'agit d'un type intégral et que vous pouvez donc lui attribuer une valeur entière, ainsi qu'une constante char.la source
int
vous recherchiez. Vous recherchiez 0x2202. Ma faute. Dans tous les cas, si vous avez leint
point de code que vous recherchez, vous pouvez simplement le convertir en achar
et l'utiliser (pour construire aString
si vous le souhaitez).Celui-ci a bien fonctionné pour moi.
Maintenant, text2 aura ∂.
la source
la source
Voici comment vous procédez:
Cette solution est d'Arne Vajhøj.
la source
int c = 2202
, ce qui est faux! Une meilleure solution que cela est simple à direint c = 0x2202
qui vous évitera de passer via une chaîne, etc.char ccc...
ligne médiane . Il suffit d'utiliserint cc = 0x2202;
et puisfinal String text=String.valueOf(cc);
Bien que ce soit une vieille question, il existe un moyen très simple de le faire dans Java 11 qui a été publié aujourd'hui: vous pouvez utiliser une nouvelle surcharge de Character.toString () :
Étant donné que cette méthode prend en charge n'importe quel point de code Unicode, la longueur de la chaîne renvoyée n'est pas nécessairement 1.
Le code nécessaire pour l'exemple donné dans la question est simplement:
Cette approche offre plusieurs avantages:
char
.char[]
, ce qui est souvent ce que vous voulez. La réponse publiée par McDowell est appropriée si vous souhaitez que le point de code soit renvoyé sous la formechar[]
.la source
int codePoint = 0x2202;
Ensuite:String s = Character.toString(codePoint); // <<< Requires JDK 11 !!!
Ou en une seule ligne:System.out.println(Character.toString(0x2202)); // Prints ∂
J'espère que cela aidera quelqu'un d'autre à utiliser cette fonctionnalité du JDK 11.Le code ci-dessous écrira les 4 caractères unicode (représentés par des décimales) pour le mot «être» en japonais. Oui, le verbe «être» en japonais a 4 caractères! La valeur des caractères est en décimal et elle a été lue dans un tableau de String [] - en utilisant par exemple split. Si vous avez Octal ou Hex, parseInt prend également une base de données.
la source
Voici un bloc pour imprimer les caractères unicode entre
\u00c0
à\u00ff
:la source
Malheureusement, supprimer un jeu comme mentionné dans le premier commentaire (newbiedoodle) ne conduit pas à un bon résultat. La plupart (sinon tous) IDE émet des erreurs de syntaxe. La raison en est que le format Java Escaped Unicode attend la syntaxe "\ uXXXX", où XXXX correspond à 4 chiffres hexadécimaux, qui sont obligatoires. Les tentatives de pliage de cette chaîne à partir de morceaux échouent. Bien sûr, "\ u" n'est pas la même chose que "\\ u". La première syntaxe signifie «u» échappé, la seconde signifie une réaction d'échappement (qui est une réaction) suivie de «u». Il est étrange que sur les pages Apache est présenté un utilitaire, qui fait exactement ce comportement. Mais en réalité, c'est l' utilitaire mimique d'Escape . Apache a ses propres utilitaires (je ne les ai pas testés), qui font ce travail pour vous. Peut-être, ce n'est toujours pas ça, ce que vous voulez avoir.Mais cet utilitaireavoir une bonne approche de la solution. Avec la combinaison décrite ci-dessus (MeraNaamJoker). Ma solution est de créer cette chaîne synoptique Escaped, puis de la reconvertir en Unicode (pour éviter une véritable restriction Unicode Escaped). Je l'ai utilisé pour copier du texte, il est donc possible que, dans la méthode uencode, il soit préférable d'utiliser '\\ u' sauf '\\\\ u'. Essayez-le.
la source
char c = (char) 0x2202; Chaîne s = "" + c;
la source
(RÉPONSE EST DANS DOT NET 4.5 et en java, il doit exister une approche similaire)
Je viens du Bengale occidental en Inde. Si je comprends bien, votre problème est ... Vous voulez produire un produit similaire à 'অ' (c'est une lettre en bengali) qui a Unicode HEX:
0X0985
.Maintenant, si vous connaissez cette valeur par rapport à votre langue, comment allez-vous produire ce symbole Unicode spécifique à la langue, n'est-ce pas?
Dans Dot Net, c'est aussi simple que ceci:
Maintenant, x est votre réponse. Mais c'est HEX par HEX converti et la conversion de phrase en phrase est un travail pour les chercheurs: P
la source