Foro sobre Java SE > Unicode y tipo char
Para eso se puede ocupar codePoint.
Unicode se amplió a 32 bits, con la correspondiente codificación UTF-16 también se extendió con un sistema torpe de caracteres suplentes para codificar los caracteres de 32 bits por encima de 0xffff.
El término punto de código en Java tiende a ser utilizado en el sentido de una ranura en la asignación Unicode de 32 bits, aunque sospecho que el término también es válido en el sentido de un lugar en Unicode-16 o cualquier otro juego de caracteres.
Java ahora se extiende a los mundos de 16 bits y 32 bits. Se podría pensar Java ahora tendría un análogo de 32 bits para caracteres, tal vez llamado punto de código y un análogo de 32 bits a String, quizá llamados puntos de código, pero no es así. En cambio, cadena s y char [] se les permite contener pares suplentes que codifican un único punto de código de alta de 32 bits.
Puntos de código StringBuilder .appendCodePoint (int punto de código) aceptará de 32 bits que se añadirán.
StringBuilder .append (int numero) solo convierte el número a una cadena y añade que, no lo que quieres!
FontMetrics. CharWidth (Int punto de código) le dirá el ancho en píxeles para representar un punto de código determinado.
Chracter.IsValidCodePoint (Int punto de código) le dirá si hay un glifo asignado a ese punto de código. Es todavía no hay garantía de su fuente hará que él sin embargo. Carácter. CodePointAt y codePointBefore permiten hacer frente a los puntos de código de 32 bits codificados como pares suplentes en arreglos de char. La mayoría de los métodos de caracteres ahora tienen una versión que acepta un int punto de código como toLowerCase.
// Iterar a través de una cadena que contiene un poco de Unicode de 32 bits
// Codificado como pares suplentes:
longitud final int = str longitud (.);
// Nota off no cuenta caracteres;
// Rastrea el desplazamiento en la cadena.
// Nota no fuera ++!
for (int off = 0; de <longitud;)
{
int Codepoint = str codePointAt (apagado).;
/ * ... * /
// Saltar al siguiente carácter, normalmente 1 ranura más adelante.
// Este código incrementador no puede ir en el puesto de punto de código no está definido allí.
off + = Carácter charCount (punto de código).;
}
Cuál es el problema? La forma en que el JVM (J ava V irtual M achine) representa la cadena internamente está oculto. Por lo general es un char [] gama de valores de 16 bits. Se podría, en teoría, ser implementado un UTF-8 o int []. Sin embargo, para el programador String. De longitud, String. CharAt y String. CodePointAt tanto el índice como si la representación fuera char []. El programador conoce la longitud de la cadena en 16 bit Char s, pero no hay un método correspondiente para decirle su longitud en puntos de código. El programador no puede pedir el punto de código 42ª en la cadena. Él sólo puede pedir punto de código que se inicia en 16 bit fuera establecido 42. Para obtener el punto de código 42, el programador debe repetir a lo largo de la cadena desde el principio. No hay una estructura de índice interno para la cadena, incluso para los abarrotada de 32-bit caracteres.
32 literales -bit
Se podría pensar que se puede simplemente incrustar caracteres de 32 bits en los literales de cadena de Java, el camino se puede en C con \ Uxxxxxxxx en lugar de \ uxxxx, pero ese método todavía no se ha hecho parte del lenguaje Java. En su lugar debe codificarlo con un par de caracteres suplentes de 16 bits.
Estoy estudiando Java y en los tipos primitivos leo que char puede almacenar 16 bits.
Sabiendo que Java trabaja con Unicode y que éste es de 32 bits.
¿Cómo almacena Java un código Unicode de 32 bits en un char de 16?
Gracias.