unicode utf-8

unicode - UTF-8 Continuación de bytes



utf-16 table (3)

Estoy tratando de averiguar qué son los "bytes de continuación" (por curiosidad) en la codificación UTF-8.

Wikipedia introduce este término en el artículo de UTF-8 sin definirlo en absoluto

La búsqueda de Google no devuelve información útil tampoco. Estoy a punto de saltar a la especificación oficial, pero preferiría leer primero un resumen de alto nivel.


"Byte de continuación" no es un término, sino una palabra normal en inglés y el término "byte". Si se usa como un pseudo término, puede confundir al lector.

El estándar de Unicode usa esta expresión en un solo lugar, cap. 5 , cláusula 5.22: "Por ejemplo, considere los primeros tres bytes de una secuencia UTF-8 de cuatro bytes, seguido de un byte que no puede ser un byte de continuación válido:". En este contexto, el significado es claro: es solo un Byte que continúa algo, es decir, una secuencia de bytes.

La página de Wikipedia aparentemente usa "byte de continuación" para significar cualquier byte en la codificación UTF-8 excepto el primer byte de la forma codificada de un carácter.


En pocas palabras, los bytes de continuación son los bytes excepto el primer byte o el byte único. En UTF-8, los bytes de continuación se inician con 0x10.


Un byte de continuación en UTF-8 es cualquier byte donde los dos bits superiores son 10 .

Son los bytes subsiguientes en secuencias multi-byte. La siguiente tabla puede ayudar:

Unicode code points Range Encoding Binary value ------------------- -------- -------------------------- U+000000-U+00007f 0xxxxxxx 0xxxxxxx U+000080-U+0007ff 110yyyxx 00000yyy xxxxxxxx 10xxxxxx U+000800-U+00ffff 1110yyyy yyyyyyyy xxxxxxxx 10yyyyxx 10xxxxxx U+010000-U+10ffff 11110zzz 000zzzzz yyyyyyyy xxxxxxxx 10zzyyyy 10yyyyxx 10xxxxxx

Aquí puede ver cómo los puntos de código Unicode se asignan a las secuencias de bytes de bytes múltiples UTF-8 y sus valores binarios equivalentes.

Las reglas básicas son las siguientes:

  1. Si un byte comienza con un bit 0 , es un valor de un solo byte menor que 128.
  2. Si comienza con 11 , es el primer byte de una secuencia de múltiples bytes y el número de 1 bits al inicio indica cuántos bytes hay en total ( 110xxxxx tiene dos bytes, 1110xxxx tiene tres y 11110xxx tiene cuatro).
  3. Si comienza con 10 , es un byte de continuación.

Esta distinción permite un procesamiento bastante práctico, como poder realizar copias de seguridad de cualquier byte en una secuencia para encontrar el primer byte de ese punto de código. Simplemente busque hacia atrás hasta encontrar uno que no comience con los 10 bits.

De manera similar, también se puede usar para un strlen UTF-8 contando solo los bytes no 10xxxxxx .