Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cuál es la diferencia entre Unicode y UTF-8?

¿Cuál es la diferencia entre Unicode y UTF-8?

En primer lugar, seamos claros: UTF-8 es una implementación de UNICODE.

UNICODE: Representa una colección de símbolos, que especifica una representación binaria consistente y no especifica un método de almacenamiento. (http://www.unicode.org/)

UTF-8: implementa UNICODE y utiliza almacenamiento multibyte.

Consideremos primero algunas cuestiones.

Primero, si usa un solo byte para representar símbolos, obviamente no es suficiente.

En segundo lugar, si usa varios bytes para representar símbolos, cuando la máquina lea,. ¿Cómo saber si 3 bytes representan un símbolo o 3 símbolos? En tercer lugar, si se utilizan 2 bytes para representar un símbolo, en primer lugar, no será suficiente para representar hasta 65535 caracteres, incluso si es suficiente, por ejemplo. , los símbolos como los códigos ASCII que solo se pueden representar con 1 byte se representan con 2 bytes, lo que es una pérdida de espacio.

Así nació UTF-8.

En primer lugar, UTF-8 usa una longitud variable para representar símbolos. En pocas palabras, a veces se usa 1 byte para representar símbolos y, a veces, 2 bytes para representar símbolos. . Entonces, para resolver el segundo problema, debemos comprender las reglas de codificación del UFT-8.

1. Para símbolos de un solo byte, el primer byte es 0 y los siguientes 7 son el código Unicode de este símbolo.

2. ), los primeros N bits del primer byte son 1, el N1.º bit es 0, los dos primeros bits de los siguientes bytes se establecen en 10 y los bits codificados restantes son la codificación UNICODE del símbolo.

Aquí encontré una imagen de Internet

Rango de símbolos Unicode | Método de codificación UTF-8

(Hex) | (Binario)

0000 0000-0000 007F | 0xxxxxxx

0000 0080-0000 07FF | 110xxxxx 10xxxxxx

0001 0000- 0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Déjame explicarte esta imagen en detalle.

Primero mire la primera línea. Significa codificación UNICODE de 00000000 a 0000007F, y el método de codificación UTF-8 correspondiente es 0XXXXXXX (X representa los bits codificados y los bits faltantes se completan con 0). .

La segunda línea representa la codificación UNICODE de 00000080 a 000007FF, y la codificación UTF-8 correspondiente es 110XXXXX 10XXXXXX. Por analogía

Entonces, la pregunta es, ¿cómo se determina este rango?

Es muy sencillo, empecemos por la primera línea. 007F, los bits efectivos reales son solo 7, por lo que 0xxxxxxx es suficiente. Pero a partir de las 0800, los bits válidos son al menos 8 bits. Tenemos que agregar un byte. Según las regulaciones de UTF-8, la representación de 2 bytes es 110XXXXX 10XXXXXX. ), entonces, podemos representar caracteres con hasta 11 bits de codificación UNICODE, que es 07FF. Después de 07FF, es 0800. Los bits efectivos son al menos 12 bits. Tenemos que usar 3 bytes para representarlo, de acuerdo con las regulaciones de UTF-8, 1110XXXX 10XXXXXX 10XXXXXX. . No mencionaré la última línea explicada.

A través del proceso anterior, entendemos el proceso de conversión de UNICODE a UTF-8. Por supuesto, lo contrario es la conversión de UTF-8 a UNICODE.

Demostramos el proceso anterior a través de un ejemplo. El carácter chino "Yang", el bit de codificación de UNICODE es 0x6768 y la forma binaria es 0110 0111 0110 1000. Según la figura anterior, sabemos que pertenece a la tercera fila, por lo que debe colocarse en la plantilla. de 1110XXXX 10XXXXXX 10XXXXXX El resultado es 11100110 10011101 10101000, la representación hexadecimal es E69DA8.

Además de los problemas de codificación del diseño, no podemos evitar otro problema, que es el problema del big endian y el small endian. Sin embargo, hay mucha información sobre este tema en línea y también es fácil de practicar. , por lo que no entraré en detalles aquí.