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.