java unicode string-literals unicode-literals

¿Cómo escribir un símbolo cruzado unicode en Java?



string-literals unicode-literals (4)

Estoy tratando de escribir este símbolo cruzado unicode ( 𐀵 ) en Java:

class A { public static void main(String[] args) { System.out.println("/u2300"); System.out.println("/u10035"); } }

Puedo escribir o con una línea a través de él ( ) bien, pero el símbolo de la cruz no aparece, sino que simplemente imprime el número 5:

# javac A.java && java A ⌀ ဃ5

¿Por qué?



Creo que Java representa caracteres Unicode de 0x0000 a 0xFFFF . Java evaluaría "/u10035" a lo que sea "/u1003" y 5 después de eso.


Está buscando U + 10035, que está fuera del plano multilingüe básico . Eso significa que no puede usar /u para especificar el valor, ya que solo se trata de U + 0000 a U + FFFF; siempre hay exactamente cuatro dígitos hexadecimales después de /u . Así que actualmente tienes U + 1003 ( "LETRA GHA MYANMAR" ) seguido de "5".

Desafortunadamente, Java no proporciona una forma literal de cadena que haga que los caracteres fuera del BMP sean fáciles de expresar. La única forma de incluirlo en un literal (pero aún en ASCII) es usar la forma de par suplente UTF-16 :

String cross = "/ud800/udc35";

Alternativamente, puede usar el formulario de punto de código de 32 bits como int :

String cross = new String(new int[] { 0x10035 }, 0, 1);

(Estas dos cadenas son iguales)

Habiendo dicho todo eso, tu consola aún necesitaría ser compatible con ese personaje; tendrás que probarlo para saber si lo hace o no.


Los escapes Unicode tienen 4 caracteres de largo. Está imprimiendo / u1003 seguido de ''5''. ¿Estás seguro de que tienes el punto de código correcto?