sirve que para ejemplos como codigo codificacion codifica caracteres utf-8 character-encoding byte character

que - utf-8 encoding



¿Cuál es la cantidad máxima de bytes para un carácter codificado en UTF-8? (2)

Sin contexto adicional, diría que el número máximo de bytes para un personaje en UTF-8 es

respuesta: 6 bytes

El autor de la respuesta aceptada correctamente señaló esto como la "especificación original", pero creo que esto engaña al lector, porque hasta donde yo sé, esta sigue siendo la especificación actual y correcta, por wikipedia , y por un libro de Google en UTF-8 en Java .

El RFC al que se hace referencia en la respuesta aceptada establece que solo cuatro bytes son relevantes para una codificación UTF-16, por lo que solo es correcto si agregamos contexto

Responda si solo traduce caracteres de UTF-16 a UTF-8: 4 bytes

Ahora, ¿son útiles todos los caracteres que pueden ser representados por UTF-16? De acuerdo con la wikipedia de nuevo , Unicode puede representar hasta puntos de código x10FFFF. Entonces, incluyendo 0, eso significa que podemos hacerlo con estos bytes: F FF FF, es decir, dos bytes y medio, o 20 bits. Mirando hacia atrás en la especificación UTF-8, vemos que podemos representar 20 bits con hasta cuatro bytes codificados en UTF-8. Asi que

respuesta si cubre todo el Unicode: 4 bytes

Pero, en Java <= v7 , ¿hablan de un máximo de 3 bytes para representar unicode con UTF-8? Esto se debe a que la especificación Unicode original solo define el plano básico multilingüe ( BMP ), es decir, es una versión anterior de Unicode, o un subconjunto del Unicode moderno. Asi que

respuesta si representa solo unicode original, el BMP: 3 bytes

Pero, el OP habla de ir por el otro camino. No de caracteres a bytes UTF-8, sino de bytes UTF-8 a una representación de "Cadena" de bytes. Tal vez el autor de la respuesta aceptada obtuvo eso del contexto de la pregunta, pero esto no es necesariamente obvio, por lo que puede confundir al lector casual de esta pregunta.

Pasando de UTF-8 a codificación nativa, tenemos que ver cómo se implementa la "Cadena". Algunos lenguajes, como Python> = 3, representarán cada carácter con puntos de código enteros, lo que permite 4 bytes por carácter = 32 bits para cubrir los 20 que necesitamos para unicode, con algo de desperdicio. ¿Por qué no exactamente 20 bits? Porque las cosas son más rápidas cuando están alineadas por byte. Algunos lenguajes, como Python <= 2 y Java representan caracteres que utilizan una codificación UTF-16, lo que significa que deben usar pares de sustitución para representar unicode extendido (no BMP). De cualquier forma, eso sigue siendo un máximo de 4 bytes.

respuesta si va UTF-8 -> codificación nativa: 4 bytes

Entonces, conclusión final, 4 es la respuesta correcta más común, así que lo hicimos bien. Pero, en ciertos contextos, debes tener cuidado. Por ejemplo, no espere que pueda representar lo que sea que lea desde una secuencia UTF-8 en un máximo de 4 bytes. Si no es unicode, puede necesitar hasta 6 bytes.

¿Cuál es la cantidad máxima de bytes para un solo carácter codificado en UTF-8?

Encriptaré los bytes de una Cadena codificada en UTF-8 y, por lo tanto, tendré que poder calcular el número máximo de bytes para una Cadena codificada en UTF-8.

¿Podría alguien confirmar la cantidad máxima de bytes para un solo carácter codificado en UTF-8?


El número máximo de bytes por carácter es 4 según RFC3629 que limita la tabla de caracteres a U+10FFFF :

En UTF-8, los caracteres del rango U + 0000..U + 10FFFF (el rango accesible para UTF-16) se codifican usando secuencias de 1 a 4 octetos.

(La especificación original permitía códigos de hasta seis caracteres para puntos de código más allá de U+10FFFF .)

Los caracteres con un código inferior a 128 requerirán 1 byte solamente, y los siguientes códigos de 1920 caracteres solo requieren 2 bytes. A menos que esté trabajando con un lenguaje esotérico, multiplicar el recuento de caracteres por 4 será una sobreestimación significativa.