¿Cómo saber el ancho de visualización preferido (en columnas) de los caracteres Unicode?

En diferentes codificaciones de Unicode, por ejemploUTF-16le oUTF-8, un personaje puede ocupar 2 o 3 bytes. Muchas aplicaciones Unicode no se ocupan del ancho de visualización de los caracteres Unicode al igual que todas son letras latinas. Por ejemplo, en80-texto de columna, que debe contener40 Caracteres chinos o80 Letras latinas en una línea, pero la mayoría de las aplicaciones (como Eclipse, Notepad ++ y todos los editores de texto conocidos, me atrevo si hay alguna buena excepción) solo cuentan cada carácter chino como 1 ancho como letra latina. Esto ciertamente hace que el formato del resultado sea feo y no alineado.

Por ejemplo, un ancho de tabulación de 8 obtendrá el siguiente resultado feo (cuente todo Unicode como 1 ancho de visualización):

apple   10
banana  7
苹果      6
猕猴桃     31
pear    16

Sin embargo, el formato esperado es (cuente cada carácter chino como ancho 2):

apple   10
banana  7
苹果    6
猕猴桃  31
pear    16

El cálculo incorrecto en el ancho de visualización de los caracteres hace que estos editores sean totalmente inútiles cuando se hace la alineación de tabulación, el ajuste de línea y el reformateo de párrafos.

Sin embargo, el ancho de un carácter puede variar entre diferentes fuentes, pero en todos los casos de fuente de terminal de tamaño fijo, el carácter chino siempre es de doble ancho. Es decir, a pesar de la fuente, se prefiere que cada carácter chino se muestre en ancho 2.

Una de las soluciones es que puedo obtener el ancho correcto al convertir la codificación aGB2312enGB2312 La codificación de cada carácter chino requiere 2 bytes. sin embargo, algunos caracteres Unicode no existen en el juego de caracteres GB2312 (oGBK juego de caracteres). Y, en general, no es una buena idea calcular el ancho de la pantalla a partir del tamaño codificado en bytes.

Para calcular simplemente todos los caracteres en Unicode en el rango de (\u0080..\uFFFF) ya que el ancho 2 tampoco es correcto, porque también hay muchos caracteres de 1 ancho dispersos en el rango.

También es difícil calcular el ancho de visualización de las letras árabes y las letras coreanas, porque construyen una palabra / carácter por un número arbitrario de puntos de código Unicode.

Entonces, el ancho de visualización de un punto de código Unicode puede no ser un número entero, creo que está bien, en la práctica pueden conectarse a un número entero, al menos mejor que ninguno.

Entonces, ¿hay algún atributo relacionado con el ancho de visualización preferido de un carácter en el estándar Unicode? ¿O alguna función de biblioteca Java para calcular el ancho de la pantalla?

Respuestas a la pregunta(5)

Su respuesta a la pregunta