Red de conocimiento de recetas - Recetas de frutas - Hoy descubrí ese problema. Creé un nuevo texto TXT (por supuesto, debe ser el más reciente), abrí el texto y escribí la palabra "Unicom".

Hoy descubrí ese problema. Creé un nuevo texto TXT (por supuesto, debe ser el más reciente), abrí el texto y escribí la palabra "Unicom".

En pocas palabras, es un error de codificación por parte de Microsoft.

El Bloc de notas se guardará automáticamente en codificación UTF-8 (en lugar de ANSI). La codificación del serial 8 es 54 80. El Bloc de notas agregó un encabezado de FF FE al guardar el archivo, pero en lugar de guardar el "enlace" como 54 80, usó 6A 00.

Técnicamente hablando, este es un fenómeno extraño en las aplicaciones de codificación de caracteres. Para ser claros, se puede decir que el bloc de notas está distraído. ¿Por qué el Bloc de notas comete errores? ¿Qué error cometió el Bloc de notas? Quizás no puedas esperar a conocer estas preguntas. Si es así, no dejaré que te vayas a casa con el estómago vacío.

En los sistemas operativos de chino simplificado, la codificación del juego de caracteres local predeterminada es la codificación GBK. A menos que elija otro método de codificación al guardar un archivo de texto del Bloc de notas, la información de caracteres ingresada con el Bloc de notas se almacenará en codificación GBK. Casualmente, la codificación GBK de la palabra "China Unicom" tiene las características de la codificación UTF-8, y el error cometido por el Bloc de notas fue confundir los archivos con la palabra "China Unicom" almacenados en la codificación GBK con la codificación UTF-8. Quizás se pregunte: ¿los archivos codificados en UTF-8 no comienzan con tres bytes especiales "EF BB BF"? En este caso, ¿cómo pudo el Bloc de notas cometer un error tan estúpido? Sí, la codificación UTF-8 estipula que los archivos codificados en UTF-8 comienzan con tres bytes especiales "EF BB BF", pero esto no es obligatorio y los primeros archivos codificados en UTF-8 no seguían esta regla. Por lo tanto, el Bloc de notas no puede determinar si el archivo está codificado en UTF-8 a través del primer byte del archivo. Solo puede determinar los datos del archivo mediante un simple análisis de codificación. Es por ello que este extraño e inevitable fenómeno ocurre en las aplicaciones de codificación de caracteres.

[Detalles]

Si la explicación anterior es solo un aperitivo de vino tinto para ti, entonces te presentaré el plato principal en porciones, unas costillas a la parrilla estilo Gran Cañón. La codificación UTF-8 utiliza de 1 a 3 bytes para codificar caracteres, y el número de bytes de codificación tiene una correspondencia estricta con el valor de codificación Unicode del carácter. Recordemos la correspondencia entre la codificación UTF 8 y Unicode.

Estructura de codificación UTF-8 de valor codificado Unicode

\u0001 - \u007E 0XXXXXXX

\u0080-\u07FF y \u 0000 110 xxxxx 10 xxxxx

\ u 0800-\ ufff 1110 xxxxx 10 xxxxx 10 xxxxx

El valor de codificación GBK de los dos caracteres "Unicom" es "c 1 aacda 8", y el método de codificación GBK utiliza dos bytes Se codifica un carácter, por lo que el tamaño del archivo con los dos caracteres "Unicom" almacenados mediante el método de codificación GBK es de cuatro bytes. A continuación, observe la forma binaria del valor codificado en GBK de los dos caracteres "Unión" y encontrará algunas cosas interesantes.

GBK hexadecimal combinado: C1 AA binario: 1100 001, 101010.

GBK hexadecimal: C1 AA binario: 1100 101, 101000.

Tenga en cuenta el color de los datos binarios anteriores. ¿En qué pensaste? Sí, son exactamente iguales que los bits suplementarios en la estructura de codificación UTF-8. Los bits suplementarios de la codificación UTF-8 hacen que los valores codificados sean más regulares y el Bloc de notas se basa en esta función para distinguir los archivos codificados en UTF-8. Todos los datos en archivos con caracteres "Unicom" cumplen con esta característica, es decir, el Bloc de notas confundió completamente el archivo con un archivo codificado en UTF-8.

Veamos cómo acaba este error. Si el valor del código GBK de China Unicom se considera como valor de código UTF-8, el archivo se convertirá en un archivo con datos "C1 AA CD A8" y codificación como UTF-8. ¿Qué verás cuando lo abras nuevamente con el Bloc de notas? Simplemente convierta la codificación UTF-8 a codificación Unicode.

Después de convertir la codificación UTF-8 "C1 AA CD A8" a codificación Unicode, el valor de codificación es "6A 00 68 03" (para conocer el método de conversión, consulte el artículo "Codificación de caracteres" en este blog). El valor de codificación Unicode de 0x006A está entre \u0001-\u007E. Si desea convertir a codificación UTF-8, obviamente solo puede usar una codificación de un byte. Entonces, aunque la codificación GBK "conectada" "C1 AA" parece una codificación UTF-8, no corresponde a ninguna codificación UTF-8. A continuación, observe el valor de codificación Unicode 0x0368, que corresponde al carácter "?". Esto es exactamente lo que veremos en el Bloc de notas. Quizás dirás que lo que veo es un rectángulo negro. Es solo la fuente. Si cambia la fuente a Song Dynasty u otras fuentes, verá "?".

Para los caracteres chinos, la codificación UTF-8 utiliza tres bytes para la codificación. Por lo tanto, si utiliza el Bloc de notas para ingresar "China Unicom" y luego elige guardar en codificación UTF-8, entonces el tamaño del archivo debe ser de 9 bytes (incluidos los tres bytes de datos iniciales), mientras que la codificación GBK del mismo archivo es 4 bytes. Finalmente, adjunto los valores de codificación GBK, UTF-8, Unicode de China Unicom y el pensamiento erróneo del Bloc de notas.

China Unicom GBK c 1 aacda 8 utf-8e 8 8194 e 9 809 unicode 54 80 1a 90.

China Unicom GBK c 1 AAC da 8 utf-8c 1 AAC da 8 unicode 6a 006803 (el resultado de confundir el valor GBK con el valor UTF-8)

Espero que esto pueda ayudarte. ¿No sé si estás satisfecho?