2012-02-20 22 views
13

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

Wikipedia introduce este término en el UTF-8 article sin definirlo en todo

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

+0

Parece que alguien acaba de editar el artículo de Wikipedia. (: – tripleee

Respuesta

30

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

Son los bytes subsiguientes en las secuencias de múltiples bytes. La siguiente tabla puede ayudar a:

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í se puede ver cómo el Unicode puntos de código de mapa para secuencias de bytes de múltiples bytes UTF-8, y sus valores binarios equivalentes.

Las reglas básicas son esto:

  1. Si un byte comienza con un poco 0, es un único valor de byte menos de 128.
  2. Si comienza con 11, es el primer byte de un multi -la secuencia de bytes y el número de bits 1 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 el procesamiento bastante práctico, tales como ser capaz de realizar copias de seguridad de cualquier byte en una secuencia de encontrar el primer byte de ese punto de código. Simplemente busque hacia atrás hasta encontrar uno que no comience con los bits 10.

Del mismo modo, también se puede utilizar para un UTF-8 strlen contando solamente 10xxxxxx bytes.

+0

Creo que esto es un poco exagerado/exagerado ... de todos modos, ¡contiene información útil! Lo que no puedo entender, es por qué '11' alguna vez se necesita. Se puede decir que el byte inicial comienza con '0', y los de continuación (pueden ser arbitrariamente muchos) comienzan con' 1'. –

+0

@ ΈρικΚωνσταντόπουλος "_el byte inicial comienza con' 0'_ "- esto no es correcto. Un byte que comienza con '0' es un punto de código de un solo byte, por lo que no es ni un _leading_ byte ni una continuación. Está solo. Eso es lo que lo distingue de los bytes que comienzan con '11', que indican que es el primer byte de una _secuencia_ y se espera que más bytes sigan para representar un único punto de código. –

+0

@WilliamPrice No sé por qué publiqué ese comentario fuera del tema, pero creo que fui yo quien intentó inventar mi propia codificación. –

0

En palabras cortas, 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.

+0

Si agrega citas, eliminaré el voto en negativo. –

0

"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 Unicode usa esta expresión en un solo lugar, Ch. 5, cláusula 5.22: "Por ejemplo, considere los primeros tres bytes de una secuencia UTF-8 de cuatro bytes, seguida de un byte que no puede ser un byte válido de continuación :. "En este contexto, el significado es claro: es solo un byte que continúa algo, a saber, una secuencia de bytes.

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