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:
- Si un byte comienza con un bit
0
, es un valor de un solo byte menor que 128. - Si comienza con
11
, es el primer byte de una secuencia de múltiples bytes y el número de1
bits al inicio indica cuántos bytes hay en total (110xxxxx
tiene dos bytes,1110xxxx
tiene tres y11110xxx
tiene cuatro). - 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
.