/ / ¿Cómo la decodificación en utf-8 conoce los límites de los bytes? - python, utf-8, decodificar

¿Cómo la decodificación en utf-8 conoce los límites de los bytes? - python, utf-8, decodificar

He estado haciendo un montón de lectura en UnicodeCodificaciones, especialmente con respecto a Python. Creo que ahora tengo una comprensión bastante clara de esto, pero todavía hay un pequeño detalle del que no estoy seguro.

¿Cómo conoce la decodificación los límites de los bytes? Por ejemplo, digamos que tengo una cadena Unicode con dos caracteres Unicode con representaciones de bytes de xc6xb4 y xe2x98x82, respectivamente. Luego escribo esta cadena Unicode en un archivo, por lo que el archivo ahora contiene los bytes. xc6xb4xe2x98x82. Ahora decido abrir y leer el archivo (y Python por defecto decodifica el archivo como utf-8), lo que me lleva a mi pregunta principal.

¿Cómo sabe la decodificación interpretar los bytes? xc6xb4 y no xc6xb4xe2?

Respuestas

3 para la respuesta № 1

Los límites de bytes se determinan fácilmente a partir de los patrones de bits. En tu caso, xc6 comienza con los bits 1100y xe2 comienza con 1110. En utf-8 (y estoy bastante seguro de que esto no es un accidente), puede determinar el número de bytes en todo el carácter mirando solo el primer byte y contando el número de 1 Bits al inicio antes de la primera. 0. Entonces tu primer carácter tiene 2 bytes y el segundo tiene 3 bytes.

Si un byte comienza con 0, es un carácter ASCII regular.

Si un byte comienza con 10, es parte de una secuencia utf-8 (no el primer carácter).