¿Cuál es el número máximo de bytes para una codificación UTF-8 caracteres?

¿Cuál es el número máximo de bytes de una sola codificado en UTF-8 caracteres?

Voy a ser el cifrado de los bytes de una Cadena codificada en UTF-8 y por lo tanto deben ser capaces de trabajar con un número máximo de bytes para una codificación UTF-8 de la Cadena.

Podría alguien confirmar el número máximo de bytes de una sola codificado en UTF-8 caracteres por favor

  • Usted hizo mirar a los recursos comunes, tales como de Wikipedia, la codificación UTF-8 Artículo, primero … ¿verdad?
  • He leído varios artículos que dio mixto respuestas… de hecho, me dio la impresión de que la respuesta fue de 3, así que estoy muy contenta de haber preguntado
  • Voy a dejar un enlace de youtube aquí, con Tom Scott de Caracteres, Símbolos Unicode milagro: goo.gl/sUr1Hf. Tienes que escuchar y ver cómo todo se está evolucionado a partir de los caracteres ASCII de la codificación a utf-8.
  • Véase también el Cálculo de la longitud en UTF-8 de Java Cadena sin codificación para la longitud de informática de código de ejemplo
InformationsquelleAutor Edd | 2012-03-02

2 Kommentare

  1. 80

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

    En UTF-8, los personajes de la U+0000..U+10FFFF rango (UTF-16
    accesible de la gama) son codificados utilizando secuencias de 1 a 4 octetos.

    (La especificación original permitido para hasta seis bytes de códigos de caracteres para el código de puntos de pasado U+10FFFF.)

    Caracteres con un código menos de 128 se requieren de 1 byte solo, y el siguiente 1920 carácter de los códigos requieren 2 bytes sólo. A menos que usted está trabajando con un lenguaje esotérico, multiplicando el número de caracteres por 4 será una sobreestimación significativa.

    • ¿Qué es «esotheric idioma» para usted? Cualquier lenguaje que pueda existir en el mundo real, o un texto que cambia entre diferentes idiomas del mundo? Si un desarrollador de UTF-8 a-función de Cadena elegir 2, 3 o 4 como multiplicador si se hace una asignación excesiva y la reduce a escala el resultado después de la conversión?
    • por «lenguaje esotérico’ que significa un idioma que tiene un montón de alto valor caracteres unicode (algo desde cerca de la parte inferior de esta lista: unicode-table.com/en/sections ). Si usted debe más a asignar, elija 4. Usted podría hacer un doble pase, uno para ver cuántos bytes que va a necesitar y asignar, a continuación, otra para hacer la codificación; que puede ser mejor que la asignación de ~4 veces la memoria RAM necesaria.
    • Siempre trato de manejar el peor de los casos: hacker9.com/single-message-can-crash-whatsapp.html
    • CJKV caracteres en su mayoría tienen 3 bytes (con algunas raras/arcaico personajes de la toma de 4 bytes) y llamar esotérico es un poco de un tramo (China por sí sola es casi el 20% de la población mundial…).
    • me pregunto si la respuesta es para la pregunta ‘¿cuántos bytes de un utf8 punto de código puede ser». Creo que la respuesta para «¿cuántos bytes de un utf8 personaje puede ser » la respuesta es infinito? Porque la descomposición de múltiples puntos de codificación en un solo personaje?
    • ¿Por qué fue limitado a 4, cuando anteriormente era de 6? Lo que nos deja de seguir la norma y de tener una ventaja de bytes de 11111111 y tener un 2^(6*7) poco espacio para los personajes?

  2. 30

    Sin más contexto, yo diría que el número máximo de bytes de un carácter en UTF-8 es

    respuesta: 6 bytes

    El autor de la aceptó contestar correctamente lo señaló como la «especificación original». Que era válido a través de RFC 2279 Uno. Como J. Cocoe se señaló en los comentarios de abajo, esto cambió en el año 2003 con RFC 3629 Dos, lo que limita UTF-8 codificación de 21 bits, que puede ser manejado con el esquema de codificación utilizando cuatro bytes.

    respuesta si cubre todos unicode: 4 bytes

    Pero, en Java <= v7, hablan de una de 3 bytes máximo para la representación unicode con UTF-8? Eso es porque la original especificación unicode sólo está definido el básico multilingüe plano (BMP), es decir, es una versión más antigua de unicode, o subconjunto de la moderna unicode. Así

    respuesta si representan sólo el original de unicode, el BMP: 3 bytes

    Pero, el OP habla de ir por otro camino. No de caracteres a UTF-8 bytes, pero a partir de bytes UTF-8 a una «Cadena» de bytes de la representación. Tal vez el autor de la aceptó responder consiguió que desde el contexto de la pregunta, pero esto no es necesariamente evidente, por lo que puede confundir al lector casual de esta pregunta.

    Va de la codificación UTF-8 para los nativos de codificación, tenemos que ver cómo la «Cadena» es implementado. Algunos lenguajes, como Python >= 3 se representan cada carácter con código entero de puntos, que permite 4 bytes por carácter = 32 bits para cubrir el 21 necesitamos para unicode, con algunos residuos. ¿Por qué no exactamente 21 bits? Porque las cosas son más rápidas cuando se byte-alineados. Algunos lenguajes como Python <= 2 y Java representar caracteres usando una codificación UTF-16, lo que significa que tienen que utilizar los pares suplentes para representar extendido unicode (no BMP). De cualquier manera que todavía 4 bytes como máximo.

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

    Así que, conclusión final, 4 más común es la respuesta correcta, así que tengo derecho. Pero, kilometraje puede variar.

    • «este es el actual y correcta especificación, por wikipedia» — no más. Poco después de que se escribió este (abril 2ª edición), de Wikipedia UTF-8 artículo fue modificado para aclarar que el 6 octetos versión no es parte de la corriente (2003) UTF-8 spec.
    • «Pero, en Java <= v7, hablan de una de 3 bytes máximo para la representación unicode con UTF-8? Eso es porque la original especificación unicode sólo está definido el básico multilingüe avión» — Que es, probablemente, la razón original, pero no es toda la historia. Java utiliza «modificado UTF-8», y una de las modificaciones es que «utiliza su propio dos-veces-tres-byte de formato» en lugar de «los cuatro bytes formato de estándar UTF-8» (sus palabras).
    • No hay puntos de codificación asignada por encima de la 10FFFF (poco más de un millón) límite y muchos de los UTF8 implementaciones nunca se llevó a cabo secuencias de más de 4 bytes (y algunos sólo 3, por ejemplo, MySQL) por lo que yo consideraría que es seguro para un límite de 4 bytes por punto de código, incluso cuando se considera la compatibilidad con implementaciones antiguas. Usted necesita para asegurarse de que deseche todo lo no válido en la forma en. Tenga en cuenta que matiu la recomendación de asignar tras el cálculo exacto de la longitud de byte es bueno donde sea posible.
    • «… [U]nicode puede representar hasta x10FFFF puntos de código. Así, incluyendo el 0, que significa que podemos hacer con estos bytes: F FF FF, es decir, dos-y-uno-mitad de bytes, o 20 bits.» Creo que esta es la un poco incorrecto. El número de puntos de código de 0x0 a través de 0x10FFFF sería 0x110000, que podría estar representado en 1F FF FF, o 21 bits. El 0x110000 número corresponde a la 17 de aviones de 0x10000 código de puntos cada uno.
    • PSA: Wikipedia no es una fuente real. Mira el artículo de referencia actuales.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea