En el trabajo diario de desarrollo front-end, a menudo tratamos con HTML, JavaScript, CSS y otros idiomas. Al igual que un lenguaje real, el lenguaje informático también tiene su alfabeto, gramática, léxicos, métodos de codificación, etc. Aquí hablaré brevemente sobre los problemas de codificación que a menudo se encuentran en el trabajo diario de HTML front-end y JavaScript.
En las computadoras, la información que almacenamos está representada por el código binario. Lo que sabemos sobre la conversión de símbolos como los caracteres ingleses y chinos que se muestran en la pantalla y el código binario utilizado para el almacenamiento está codificando.
Hay dos conceptos básicos por explicar, la codificación de carácter y caracteres:
Charset, un conjunto de caracteres, es decir, una tabla de relaciones de mapeo entre un símbolo y un número, es decir, determina que 107 es el 'A' de Koubei, 21475 es la "boca" de la palabra de boca, y diferentes tablas tienen diferentes relaciones de mapeo, como ASCII, GB2312, unicódico. A través de esta tabla de mapeo de números y caracteres, podemos convertir un número binario representado en cierto carácter.
Codificación de gramter, método de codificación. Por ejemplo, para el número 21475 que debe estar "portado", ¿deberíamos usar /U5K3E3 para representarlo, o%E5%8F%A3 para representarlo? Esto está determinado por la codificación de personajes.
Para cadenas como 'Cuoxin.com', son personajes comúnmente utilizados para los estadounidenses. Han formulado un conjunto de caracteres llamado ASCII, con el nombre completo del Código Estándar de Intercambio de Información. Los 128 números 0127 (a la séptima potencia de 2, 0 × 00-0 × 7f) representan los 128 caracteres comúnmente utilizados como 123ABC. Hay 7 bits en total, y el primero es el bit de signo, que debe usarse para usar el código inverso del complemento para representar números negativos o algo así. Hay 8 bits en total para formar un byte. Los estadounidenses eran un poco tacaños en ese entonces. Si hubieran diseñado un byte que fuera de 16 bits o 32 bits desde el principio, habría muchos problemas en el mundo. Sin embargo, en ese momento, probablemente pensaron que 8 bits eran suficientes, ¡lo que podría representar 128 personajes diferentes!
Debido a que las computadoras están hechas por los estadounidenses, guardan problemas y codifican todos los símbolos que usan, lo que las hace muy cómodas de usar. Pero cuando las computadoras comenzaron a internacionalizarse, surge el problema. Tome China como ejemplo. Los caracteres chinos son solo decenas de miles. ¿Qué tengo que hacer?
Los 8 bits existentes Un sistema de byte es la base, no se puede destruir, no se puede modificar a 16 bits o algo así, de lo contrario, los cambios serán demasiado grandes, por lo que solo puede tomar otra ruta: usar múltiples caracteres ASCII para representar un carácter diferente, es decir, MBCS (sistema de caracteres multi-bytes, sistema de caracteres múltiples).
Con este concepto de MBC, podemos representar más personajes. Por ejemplo, si usamos 2 caracteres ASCII, hay 16 bits, y en teoría hay 2 caracteres para el poder de 16 65,536 caracteres. Pero, ¿cómo se asignan estas codificaciones a los personajes? Por ejemplo, la codificación unicode de la "boca" "boca" es 21475. ¿Quién decidió? El conjunto de caracteres, que es el charset que se acaba de introducir. ASCII es el conjunto de caracteres más básico. Por encima de esto, tenemos conjuntos de personajes similares a GB2312 y Big5 para MBC en chino y tradicional chino simplificado, etc. Finalmente, había una institución llamada Unicode Consortium, que decidió crear un conjunto de caracteres (UCS, conjunto de caracteres universales) que incluye todos los personajes y el método de codificación correspondiente, Namely Unicode. Desde 1991, ha lanzado la primera edición de Unicode International Standards, ISBN 0-321-18578-1, y la Organización Internacional para la Normalización ISO también ha participado en la personalización de este, ISO/IEC 10646: el conjunto de caracteres universal. En resumen, Unicode es un estándar de caracteres que básicamente cubre todos los símbolos existentes en la Tierra. Ahora se está utilizando cada vez más ampliamente. El estándar ECMA también estipula que los caracteres internos del lenguaje JavaScript usan el estándar Unicode (¡esto significa que los nombres variables de JavaScript, los nombres de funciones, etc. están permitidos en chino!).
Para los desarrolladores en China, pueden encontrar más problemas, como la conversión entre GBK, GB2312 y UTF-8. Estrictamente hablando, esta declaración no es muy precisa. GBK y GB2312 son conjuntos de caracteres (charsets), mientras que UTF-8 es un método de codificación (codificación de caracteres), que es un método de codificación de conjuntos de caracteres UCS en el estándar Unicode. Debido a que las páginas web que usan conjuntos de caracteres Unicode están codificadas principalmente con UTF-8, las personas a menudo las juntan, lo que en realidad es inexacto.
Con Unicode, al menos antes de que la civilización humana encontrara extraterrestres, esta es una clave maestra, así que úsala. Ahora, el método de codificación Unicode más utilizado es UTF-8 (formato de transformación UCS/UNICODE de 8 bits), que tiene varias cosas particularmente buenas:
Codificando el conjunto de personajes de UCS, Universal Worldwide
Es un método de codificación de caracteres de longitud variable, compatible con ASCII
El segundo punto es una gran ventaja, lo que hace que los sistemas que utilizaron una codificación ASCII pura previamente compatible, y no agrega almacenamiento adicional (suponiendo que se establece un método de codificación largo, cada carácter consta de 2 bytes, entonces el espacio de almacenamiento ocupado por caracteres ASCII se duplicará en este momento).