Colección de citas famosas - Consulta de diccionarios - ¿Cuántos caracteres ocupa un carácter chino?

¿Cuántos caracteres ocupa un carácter chino?

Si por "carácter" te refieres a un carácter en Java, entonces son 16 bits, 2 bytes.

Si por "caracteres" te refieres a esos "caracteres abstractos" que vemos con nuestros ojos, entonces no tiene sentido hablar de cuántos bytes ocupa. En concreto, no tiene sentido hablar de cuántos bytes ocupa un carácter sin una codificación específica.

Es como tener un número entero abstracto "42". ¿Cuántos bytes crees que ocupa? Depende de si usas byte, short, int o long para almacenarlo.

Un byte se almacena en byte, dos bytes cortos se almacenan en int y cuatro bytes se almacenan en long.

Por supuesto, si usa bytes, está limitado por su número limitado de dígitos y algunos números no se pueden guardar. Por ejemplo, 256 no se puede poner en un byte.

Lo mismo ocurre con los personajes. Para hablar de "cuántos bytes", primero debemos comprender la codificación. El mismo carácter puede ocupar diferentes bytes en diferentes codificaciones.

Toma la palabra "子" que diste como ejemplo. La palabra "secundaria" ocupa 2 bytes en codificación GBK, 2 bytes en codificación UTF-16, 3 bytes en codificación UTF-8 y 4 bytes en codificación UTF-32. Bajo la misma codificación, diferentes caracteres pueden ocupar diferentes bytes.

"Palabra" ocupa 3 bytes en codificación UTF 8, mientras que "A" ocupa 1 byte en codificación UTF 8. (Porque UTF 8 es una codificación de longitud variable), mientras que char en Java es básicamente una codificación UTF 16. UTF-16 es en realidad un código de longitud variable (2 o 4 bytes).

Si un carácter abstracto ocupa 4 bytes bajo codificación UTF-16, obviamente no se puede poner en char. En otras palabras, solo aquellos caracteres que ocupan solo 2 bytes bajo codificación UTF-16 se pueden poner en char. Aunque getBytes es en realidad una conversión de codificación, debe pasar explícitamente un parámetro para especificar la codificación; de lo contrario, utilizará la codificación predeterminada para la conversión.

Dices "new String("word").getBytes().length? devuelve 3", lo que significa que la codificación predeterminada es UTF-8.

Si pasa explícitamente un parámetro, como "new String("word").getBytes("GBK").length", el valor de retorno es 2. Puede configurar la codificación predeterminada al iniciar la JVM. Supongamos que su clase se llama Main, cuando ejecuta la clase en Java en la línea de comando, puede configurar la codificación predeterminada a través del parámetro file.encoding.

Así: java -Dfile.encoding=GBK Main

En este punto, cuando ejecutas el método getBytes() sin parámetros, se genera la nueva cadena ("palabra") . obtenerBytes(). ¿longitud? Es 2 porque la codificación predeterminada ahora es GBK.

Por supuesto, si especifica la codificación explícitamente, new String("word"). ByteBounce ("UTF-8"). ¿longitud? La tasa de rendimiento sigue siendo 3.

En caso contrario, se utilizará la codificación predeterminada del entorno del sistema operativo.

Generalmente, GBK se usa para Windows y UTF-8 para Linux y Mac.

Sin embargo, cabe señalar que cuando se utiliza un IDE para ejecutar en Windows (como Eclipse), si la codificación predeterminada del proyecto es UTF-8, se agregará el -Dfile mencionado anteriormente cuando ejecutando el programa en el parámetro IDE encoding=UTF-8. En este punto, incluso en Windows, la codificación predeterminada es UTF-8, no GBK.

Debido a la influencia de los parámetros de inicio y el entorno del sistema operativo, generalmente no se recomienda utilizar el método getBytes sin parámetros. Es mejor especificar los parámetros explícitamente para obtener un comportamiento esperado estable.