java - ¿Qué hace exactamente String.codePointAt?
unicode (3)
Recientemente me encontré con el método codePointAt de String en Java. También encontré algunos otros métodos de codePoint : codePointBefore
, codePointBefore
, etc. Definitivamente tienen algo que ver con Unicode, pero no lo entiendo.
Ahora me pregunto cuándo y cómo se debe usar codePointAt
y métodos similares.
En pocas palabras, siempre y cuando uses el juego de caracteres predeterminado en Java :). Para una explicación más detallada, prueba estas publicaciones:
Comparando un char con un punto de código? http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Character.html http://javarevisited.blogspot.com/2012/01/java-string-codepoint-get-unicode.html
Espero que esto ayude a aclarar las cosas para ti :)
Los puntos de código admiten caracteres por encima de 65535 que es Character.MAX_VALUE.
Si tiene texto con caracteres tan altos, debe trabajar con puntos de código o int
lugar de caracteres.
Esto no es compatible con UTF-16 que puede usar uno o dos caracteres de 16 bits y convertirlo en un int
AFAIK: en general, esto solo es necesario para los caracteres complementarios multiliguales e ideográficos complementarios añadidos recientemente, como el chino no tradicional.
Respuesta corta: le da el punto de código Unicode que comienza en el índice especificado en String
. es decir, el "número Unicode" del personaje en esa posición.
Respuesta más larga: Java se creó cuando 16 bit (también conocido como char
) era suficiente para contener cualquier carácter Unicode que existiera (esas partes ahora se conocen como Basic Multilingual Plane o BMP ). Más tarde, Unicode se amplió para incluir caracteres con un punto de código> 2 16 . Esto significa que un char
ya no puede contener todos los puntos de código Unicode posibles.
UTF-16 fue la solución: almacena los "viejos" puntos de código Unicode en 16 bits (es decir, exactamente un char
) y todos los nuevos en 32 bits (es decir, dos valores de char
). Esos dos valores de 16 bits se llaman un "par suplente". Ahora, estrictamente hablando, un char
tiene una "unidad de código UTF-16" en lugar de "un carácter Unicode" como solía hacerlo.
Ahora todos los métodos "antiguos" (que solo usan caracteres) se pueden usar muy bien siempre que no use ninguno de los "nuevos" caracteres Unicode (o realmente no se preocupe por ellos), pero si le importa el también nuevos personajes (o simplemente necesitan tener compatibilidad total con Unicode), entonces deberá usar las versiones de "código de punto" que realmente admiten todos los puntos de código Unicode posibles.