¿Por qué hay caracteres confusos? ¿Qué es el códec? ¿Por qué hay tantos conjuntos de caracteres?

Con sentimientos y cosas secas, la búsqueda de WeChat [ San Taizi Ao Bing ] presta atención a este programador diferente.

Este artículo se ha incluido en GitHub https://github.com/JavaFamily , con los sitios de prueba completos, materiales y mi serie de artículos para entrevistas con las principales empresas.

Prefacio

Creo que todo el mundo se ha encontrado con códigos confusos. Hoy, mi novia Sanwai se acercó apresuradamente a mí: "Querida, ¿por qué mi idea genera códigos confusos?"

Logré hacerlo por él después de una comida, pero Sanwai se merece ser mi novia de Mogujie, la curiosidad es la misma que la mía, solo sígueme.

Entonces, ¿por qué hay caracteres confusos?

¿Qué es codificar y qué es decodificar?

¿Qué es un código de carácter y qué es un conjunto de caracteres?

¿Por qué debería haber Unicode? ¿Cuál es la diferencia entre UTF-8 y GBK?

Sanwai se sentó en mi regazo y me habló como una coqueta serie de preguntas, soy fan pero novia, así que tengo este artículo.

¿Por qué hay distorsionado

Sabemos que lo que se almacena en una computadora es solo un flujo de bytes compuesto por 0 y 1, y los números por sí solos no pueden satisfacer nuestras necesidades. También necesitamos procesamiento de texto, etc., pero las computadoras solo reconocen números, por lo que debemos decirle a la computadora qué números Qué personaje representa .

Por ejemplo, especifiqué el representante de 0000 A, 0001 B representa que la computadora lo sabrá, así que estoy probando AB dos caracteres almacenados en la computadora, en realidad está almacenado 0000 0001, de hecho, es equivalente a personalizar cada carácter con un código único .

Pero esta es mi designación. Diferentes personas tienen diferentes ideas. Por ejemplo, a Xiao Ming le gusta 1000 para A y 1111 para B. Luego, la computadora de Xiao Ming se almacena en el método de codificación que él especificó, es decir 1000 1111, después de que se transmite a mi computadora, tomo Entonces 1000 1111, de acuerdo con mi código, puede ser% &, que está distorsionado.

Entonces, la esencia del código ilegible es que no hay correspondencia entre codificación y decodificación .

Es posible que algunos estudiantes no estén familiarizados con los conceptos de codificación y decodificación, déjame explicarte:

  • Codificación: de hecho, es el proceso de convertir caracteres en un flujo de bytes de acuerdo con un formato determinado.
  • Decodificación: consiste en analizar el flujo de bytes en caracteres.

Se puede ver que la codificación aleatoria dará como resultado la situación en que las computadoras respectivas no pueden analizarla correctamente, por lo que debe haber un estándar, y todos usan ese estándar para especificar la correspondencia entre caracteres y números.

Codificación de caracteres estándar

El Instituto Nacional Estadounidense de Estándares ANSI ha desarrollado un estándar, el Código Estándar Estadounidense para el Intercambio de Información (ASCII), que especifica el conjunto de conjuntos de caracteres de uso común y los números digitales correspondientes. Por ejemplo, 65 significa A.

ASCII es en realidad una codificación de 7 bits, expresada en código binario, es 0000000 ~ 1111111, pero 1 byte son 8 bits, por lo que generalmente se usan 8 bits para el almacenamiento. Puede ver que ASCII representa 128 caracteres. Esto es en realidad una codificación estadounidense. Mire el Reino Unido, que también habla inglés, no hay una almohadilla en ASCII.

Hay coreanos, japoneses, etc., y mucho menos chinos.

1 byte solo puede representar 256 caracteres como máximo, por lo que no es suficiente para nosotros, por lo que debe ampliarse. Por ejemplo, GB2312 es el "Juego de caracteres codificados en caracteres chinos para el intercambio de información" emitido por la Administración Estatal de Normas. Más tarde, se lanzó GBK. K es el significado de expansión Sobre la base de GB2312, se agregan muchos caracteres, como los tradicionales.

Por lo tanto, cada país tiene sus propios estándares, porque los idiomas son diferentes y las diferencias en los juegos de caracteres hacen que la comunicación de documentos entre computadoras sea muy difícil, por lo que todos han iniciado una ola de estandarización.

Por ejemplo, la organización ANSI de Estados Unidos ha formulado la codificación de caracteres estándar ANSI, que en realidad es la codificación predeterminada de la plataforma. Por ejemplo, el sistema operativo chino usa GBK, si es de Estados Unidos, usa ASCII y el sistema operativo preinstalará estos conjuntos de caracteres estándar.

Pero esto solo puede resolver la situación de un documento y la codificación de un carácter. Supongamos que mi documento contiene japonés, francés, alemán, ruso, chino, ¿qué dices?

Unicode

Entonces se creó otro Unicode, también conocido como Unicode, Código Universal y Código Único .

El conjunto de caracteres Unicode cubre todos los caracteres utilizados actualmente por los humanos, y cada carácter está numerado uniformemente y se asigna un código de carácter único. Verá, este tipo de cosas debe hacerlo alguien, de lo contrario no habrá uniformidad.

Aquí hay algunos términos que debo explicar para que todos sean más claros.

  • Caracteres: De hecho, al igual que las letras en inglés, o nuestros chinos se llaman caracteres
  • Conjunto de caracteres: es el conjunto de caracteres y números.
  • Código de carácter: es el número correspondiente al carácter en el juego de caracteres, o el número, por ejemplo, en el juego de caracteres ASCII, el código de carácter de A es 65
  • Codificación de caracteres: de acuerdo con la relación de mapeo entre caracteres y números en el juego de caracteres, la realización de la conversión en un flujo de bytes

Para Unicode, una cosa es diferente de la codificación anterior, desacopla el juego de caracteres y la codificación.

Las codificaciones anteriores, como la codificación ASCII, la codificación GBK, etc., su conjunto de caracteres y la implementación de la codificación están atadas, puede comprender que la codificación anterior es en realidad una tabla de búsqueda, hay una tabla fija para almacenar este carácter y el binario fijo correspondiente Por ejemplo, el número correspondiente a A es 65 y su secuencia binaria es 01000001.

Unicode es diferente. Separa el conjunto de caracteres y la implementación de la codificación de caracteres. Por ejemplo, el número correspondiente a A es 65, pero la secuencia binaria correspondiente no es necesariamente. Depende de la codificación de caracteres específica. Si es codificación UTF-8, es 01000001, si es codificación UTF-16 (big endian), lo es 00000000 01000001.

Esta es realmente la razón por la que ahora usamos UTF-8 en lugar de UTF-16. Se puede ver que la codificación UTF-16 tiene una baja eficiencia de almacenamiento, se usan al menos dos bytes y muchas funciones del lenguaje C usarán 0x00 bytes como El carácter de parada de la cadena se analiza, así que hice un UTF-8, que usa 1 ~ 4 bytes para codificar cada carácter, que es de longitud variable. No diré cómo codificarlo, solo compruébalo. .

Al final

En este punto, hemos aclarado la fuente del código confuso y también sabemos por qué hay tantas codificaciones de caracteres. Después de todo, hay muchos idiomas, y ASCII se lanzó por primera vez, pero no es suficiente para otros países, por lo que los hemos expandido por separado.

Sin embargo, hay más codificaciones y es difícil lograr uniformidad y compatibilidad entre países. Por lo tanto, las organizaciones internacionales luego formularon un juego de caracteres Unicode, que unificó todos los caracteres y separó el juego de caracteres y la codificación para hacer la codificación más flexible. Ven.

Por cierto, la razón por la que no hay caracteres confusos en inglés es porque la mayoría de los conjuntos de caracteres se basan en extensiones ASCII, por lo que son compatibles con ASCII.

Este número debe considerarse como una serie de divulgación científica interesante, pero aún así quiero sus elogios jaja.

Hablar

¡Ao Bing compiló el ensayo de su entrevista en un libro electrónico con 1630 páginas!

Lleno de productos secos, la esencia de cada palabra. El contenido es el siguiente, así como las preguntas de la entrevista y las plantillas de currículum que resumí durante la revisión, que ahora se entregan a todos de forma gratuita.

Enlace: https://pan.baidu.com/s/1ZQEKJBgtYle3v-1LimcSwg Contraseña:wjk6

Soy Ao Bing, cuanto más sepa, más no sabe . Gracias a todos por sus elogios , favoritos y comentarios . ¡Nos vemos en el próximo número!


El artículo se actualiza continuamente. Puede buscar " San Tai Zi Ao Bing " en WeChat para leerlo por primera vez y responder a [ Información ] He preparado la información de la entrevista y la plantilla de currículum de los fabricantes de primera línea. Este artículo se ha incluido en GitHub https://github.com/JavaFamily , Hay sitios de prueba completos para entrevistas con las principales fábricas, y Star es bienvenido.

Supongo que te gusta

Origin blog.csdn.net/qq_35190492/article/details/109091892
Recomendado
Clasificación