Codificación y decodificación de caracteres en el desarrollo de programación-Principios

I. Introducción

En el desarrollo diario, a menudo nos encontramos con el problema de caracteres confusos en la visualización y conversión de cadenas, especialmente cuando nos encontramos con el procesamiento chino, luego encontramos varias soluciones en línea, Ctrl+c/ctrl+v y compilamos varios códigos en el IDE. y vea si puede mostrarse normalmente. El resultado es que una vez que el código depurado en el entorno de desarrollo se implementa en el entorno de producción, el problema del código confuso aún existe. El problema puede parecer difícil, pero no lo es en absoluto. Siempre que comprenda los principios de codificación y decodificación de caracteres en las computadoras, el problema se puede resolver fácilmente. A continuación se presenta un resumen del aprendizaje durante este período.

2. ¿Por qué se necesita codificar y decodificar?

Sabemos que varias formas de almacenamiento de datos en las computadoras se almacenan en formato binario, y los caracteres no son una excepción. Aunque se nos muestran como un gráfico específico (celosía), se almacenan como un determinado valor numérico en la computadora. De acuerdo con la definición de aprendizaje por computadora, a dicha secuencia de valores binarios la llamamos byte. En este momento, existe una relación entre un determinado carácter y un determinado byte, es decir, una tabla de relaciones de caracteres. Presentaremos en detalle lo que esto La tabla de relaciones es posterior. Entonces existe el proceso de codificación y decodificación, a saber:

Codificación: El proceso de convertir caracteres en secuencias binarias correspondientes;

Decodificación: El proceso de convertir secuencias binarias en caracteres correspondientes.

3. Tabla de correspondencias entre caracteres y secuencias numéricas binarias.

Mencionamos anteriormente que los caracteres que se nos muestran son en realidad un valor de secuencia binaria correspondiente en la computadora, entonces, ¿qué es esta tabla de correspondencia? La siguiente es una introducción al proceso de desarrollo de la codificación de caracteres.

(1) El período histórico: tabla ASCII

Debido a que las computadoras nacieron en los Estados Unidos, fueron las primeras en definir la tabla de correspondencia entre caracteres y valores de secuencia binaria, por lo que se produjo el código ASCII, de hecho, el nombre completo es Código estándar americano para interfaz de información. Es un conjunto de codificaciones basadas en el alfabeto latino, que se utiliza principalmente para mostrar a los usuarios el inglés moderno y otros alfabetos de idiomas de Europa occidental. Está diseñado para utilizar un byte para representar un carácter. Debido a que un byte tiene 8 bits binarios, puede representar 2^8=256 caracteres. De hecho, hay 128 caracteres útiles y 128 caracteres están reservados. Se ampliará más adelante.

(2) El período caótico de la fragmentación: listas de codificación construidas por cada país

Con el continuo desarrollo de la tecnología informática, cada vez más países están comenzando a utilizar computadoras. Sin embargo, la tabla ASCII original solo puede representar caracteres en inglés, lo que no es amigable para los ciudadanos que se aman a sí mismos y el costo de aprendizaje también es alto, lo que no favorece la popularización de las computadoras. ¿Puedes poner los símbolos del idioma de tu propio país en la computadora? Obviamente es posible, pero originalmente ASCII solo podía representar 256 caracteres y no podía admitir miles de símbolos lingüísticos en nuestro propio país. Por ejemplo, hay casi 100.000 caracteres chinos y se utilizan miles de caracteres chinos a diario. Entonces la gente comenzó a formular sus propias tablas de correspondencia de relaciones de caracteres, y tenemos nuestras tablas de correspondencia de relaciones de caracteres chinos GB2312, GBK y GB18030 (para obtener más detalles, consulte: Comprender a fondo GB2312, GBK y GB18030 - Zhihu ) .

1.GB2312. En 1980, China lanzó el primer estándar de codificación de caracteres chinos, a saber, GB2312, cuyo nombre completo es "Conjunto básico de caracteres de codificación de caracteres chinos para el intercambio de información", generalmente denominado GB (la primera letra del pinyin chino). de "Estándar Nacional"), incluido un total de Contiene 6763 caracteres y caracteres chinos de uso común. Este estándar se implementó en mayo del año siguiente y satisface las necesidades del 99% del uso diario de caracteres chinos.

GB2312 codifica cada carácter chino en dos bytes, el primer byte es el byte de orden superior y el segundo byte es el byte de orden inferior.

Por ejemplo: el código de ubicación de la palabra "中" es 54 48 y la notación hexadecimal correspondiente es 0x36 0x30, por lo que su código interno es (0x36 + 0xA0) (0x30 + 0xA0), es decir, 0xD6 0xD0

2.GBK. Dado que algunos caracteres chinos se simplificaron después del lanzamiento del estándar GB2312, y algunos nombres personales, caracteres chinos tradicionales, caracteres chinos japoneses y coreanos no se incluyeron, estos caracteres se agregaron sobre la base de GB2312 para formar GBK, el nombre completo. de "Especificación de extensión de código interno de caracteres chinos", contiene más de 20.000 caracteres y caracteres chinos y es totalmente compatible con GB2312. GBK se publicó en 1995, pero es sólo un "documento guía de especificaciones técnicas" y no es un estándar nacional.

3.GB18030. GB18030, el nombre completo de "Conjunto de caracteres codificados chinos para tecnología de la información", contiene más de 70.000 caracteres y caracteres chinos. Agrega caracteres chinos en textos y caracteres chinos, japoneses y coreanos y minoritarios sobre la base de GBK. Es totalmente compatible con GB2312 y básicamente compatible con GB2312.GBK.

(3) Período compatible y unificado: tabla de codificación Unicode

Debido a que durante el período de caos, cada país desarrolló su propio sistema de codificación y los países no podían comunicarse normalmente, alguien diseñó un conjunto de codificaciones de caracteres unificadas a nivel mundial para almacenar los símbolos de texto utilizados por todos los países, a saber, Unicode. El nombre científico de Unicode es (Conjunto universal de caracteres codificados de octetos múltiples), denominado UCS. Unicode es un esquema de codificación de caracteres desarrollado por Unicode Consortium que tiene como objetivo permitir el intercambio de datos entre plataformas, aplicaciones y idiomas mediante la codificación de caracteres en todos los idiomas humanos. Unicode también se conoce como Unicode, Código Universal y Unicode. Unicode estipula que todos los caracteres y símbolos están representados por al menos 2 bytes (16 bits), por lo que el número mínimo de caracteres que puede representar el código Unicode es 2 ^ 16 = 65536.

Unicode estándar utiliza 4 bytes para representar una cadena. Por ejemplo, U+0639 representa la letra árabe Ain, U+0041 representa la letra mayúscula inglesa A y U+4E6D representa el carácter chino "乭". Obviamente, Unicode y GBK son incompatibles.

(4) Período de optimización para ser diligente y ahorrativo: codificación UTF-8

La tabla de codificación Unicode producida durante el período unificado utiliza 4 bytes para representar un carácter. Obviamente es injusto para los países que sólo necesitan 1 byte para representar símbolos de texto. Además, los dispositivos de almacenamiento en ese momento eran caros y no había tantos. Se compra dinero para almacenar datos electrónicos. Entonces la gente comenzó a optimizar la codificación Unicode y diseñó la codificación UTF-8. UTF-8 ya no requiere un mínimo de 2 bytes para la codificación, pero clasifica todos los caracteres mediante reglas de codificación. Por ejemplo, ASCII está representado por 1 byte y el chino está representado por 2-3 bytes. Y Unicode solo estipula cómo se codifican los caracteres, pero no especifica cómo almacenarlos y transmitirlos. La secuencia binaria durante la transmisión es diferente del binario codificado: Unicode se usa para la codificación y UTF-8 se usa para el almacenamiento y la transmisión, lo que se presentará en detalle a continuación.

Al igual que cómo distinguir bits binarios consecutivos en la comunicación de red, UTF-8 es un método de codificación de diferentes longitudes. Para secuencias de bytes continuas, ¿cómo distingue la computadora si 1 byte representa 1 carácter o 2 bytes representan 1? caracteres. Entonces la gente estipuló:

Si el primer bit de un byte es 0, significa que el byte representa 1 carácter, como el código ASCII.

Si los primeros n bits del primer byte se establecen en 1, el bit n+1 se establece en 0 y los dos primeros bits de los siguientes bytes se establecen en 10. Los bits binarios restantes se rellenan con el código Unicode del carácter. Como se muestra en la siguiente tabla

Rango de símbolos Unicode Método de codificación UTF-8
(hexadecimal) (binario)
0000 0000~0000 007F 0xxxxxxx
0000 0080~0000 07FF 110xxxxx 10xxxxxx
0000 0800~0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
0001 0000~0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Se puede entender de esta manera: si el primer bit es 1, entonces, dependiendo de cuántos unos consecutivos haya después, significa cuántos bytes ocupa este carácter. Los primeros dos bits de los siguientes bytes consecutivos son 10, lo que indica que todos son códigos de bytes utilizados para representar este carácter.

Por ejemplo, el código Unicode del carácter chino "I" es 0x6211, binario 110001000010001, correspondiente a la tercera línea (0000 0800 ~ 0000 FFFF), por lo que "I" requiere tres bytes y el formato es "1110xxxx 10xxxxxx 10xxxxxx". Luego, comenzando desde el último dígito binario de "I", complete la x en el formato de atrás hacia adelante y complete los bits adicionales con 0. De esta manera, la codificación UTF-8 de "I" es "11100110 10001000 10010001", cuando se convierte a hexadecimal es E68891, que es la codificación binaria que finalmente se almacena en la computadora.

Nota: Hay muchas herramientas de conversión de codificación UTF-8 en línea en Internet que dicen que pueden convertir caracteres chinos a codificación UTF-8. De hecho, la mayoría de las herramientas solo convierten caracteres chinos en sus correspondientes puntos de código Unicode, y no realmente almacenarlos y convertirlos Codificación UTF-8 durante la transmisión. Puede comprobar la codificación UTF-8 y la codificación Unicode correspondientes a los caracteres chinos y podrá ver que las dos son diferentes.

Además de UTF-8, las implementaciones de Unicode incluyen UTF-16 y UTF-32. UTF-16 usa de 2 a 4 bytes para representar un carácter, mientras que UTF-32 usa los 4 bytes estándar para representar un carácter, correspondientes a su código Unicode uno a uno. No importa qué forma de expresión se utilice, el código Unicode correspondiente al mismo carácter es el mismo, pero el código se convierte de manera diferente durante el almacenamiento y la transmisión.

Supongo que te gusta

Origin blog.csdn.net/hongdi/article/details/132752477
Recomendado
Clasificación