J'essaie d'écrire ce symbole croix unicode ( ???? ) en Java:
class A {
public static void main(String[] args) {
System.out.println("\u2300");
System.out.println("\u10035");
}
}
Je peux écrire o avec une ligne ( ⌀ ) très bien, mais le symbole de la croix n'apparaît pas, au lieu de cela, il affiche simplement le nombre 5:
# javac A.Java && Java A
⌀
ဃ5
Pourquoi?
Vous recherchez U + 10035, qui est en dehors du Plan multilingue de base . Cela signifie que vous ne pouvez pas utiliser \u
pour spécifier la valeur, car cela ne concerne que U + 0000 à U + FFFF - il y a toujours exactement quatre chiffres hexadécimaux après \u
. Donc, actuellement, vous avez U + 1003 ( "MYANMAR LETTER GHA" ) suivi de '5'.
Malheureusement Java ne fournit pas de forme littérale de chaîne qui rend les caractères en dehors de BMP simples à exprimer. La seule façon de l'inclure dans un littéral (mais quand même en ASCII) consiste à utiliser la forme de substitution UTF-16 :
String cross = "\ud800\udc35";
Vous pouvez également utiliser la forme de point de code 32 bits comme int
:
String cross = new String(new int[] { 0x10035 }, 0, 1);
(Ces deux chaînes sont égales.)
Cela dit, votre console devra toujours prendre en charge ce personnage - vous devrez l'essayer pour savoir si oui ou non.
Je crois que Java représente les caractères Unicode de 0x0000
à 0xFFFF
. Java évaluerait "\u10035"
à quoi que ce soit "\u1003"
est et un 5 après cela.
0x10035 est un caractère Unicode supplémentaire. Vous aurez besoin d'une police qui le prend en charge si vous voulez que votre programme le rende.
http://www.Oracle.com/technetwork/articles/javase/supplementary-142654.html
Les échappements Unicode comportent 4 caractères. Vous imprimez\u1003 suivi de '5'. Êtes-vous sûr d'avoir le bon point de code?