Cómo determinar la codificación UTF8, UNICODE y GBK
Tome "Soy chino" como ejemplo
Tome el almacenamiento de codificación ANSI: 12 bytes
Almacenamiento en codificación Unicode/UCS2: 24 bytes 2 bytes (encabezado)
Almacenamiento en codificación UCS4: 48 bytes. Almacenamiento Unicode/UCS2: 24 bytes 2 bytes (encabezado)
Almacenamiento UCS4: 48 bytes 4 bytes (encabezado)
Tome "Soy chino" como ejemplo
Almacenamiento ANSI: 10 Bytes
Almacenamiento Unicode/UCS2: 10 Bytes
Almacenamiento Unicode/UCS2: 10 Bytes
Comparar con "Soy chino". UCS2: 10 bytes 2 bytes (encabezado)
UCS4: 20 bytes 4 bytes (encabezado)
Se puede ver que almacenar directamente en la forma original de Unicode/UCS2 es una tarea enorme. Problema derrochador y no propicio para la transmisión por Internet (el chino es más rentable ^^).
Se puede ver que el almacenamiento directo en la forma original de Unicode / UCS es un gran desperdicio y no favorece la transmisión por Internet (el chino es más rentable ^^).
En vista de esto, apareció la forma comprimida de Unicode/UCS UTF8 en la primera oración del sitio web oficial: "UTF-8 significa Unicode Transformation Format-8. Es el octal (8-). bit) codificación sin pérdidas UTF-8 significa Formato de transformación Unicode-8. Debido a que UTF también es adecuado para la codificación UCS, también se le puede llamar 'Formato de transformación UCS (UTF)'
UTF8 se basa en 8. Bit, es decir, 1Bytes como unidad de codificación más básica. Por supuesto, también existen formas basadas en 16 bits y 32 bits, las llamadas UTF16 y UTF32, pero no se usan comúnmente, mientras que UTF8 se usa ampliamente para el almacenamiento de archivos. y transmisión de red
Principios de codificación
Comencemos con esta plantilla:
Rango UCS-4 (hex.
) Secuencia octal UTF-8 (binaria)
0000 0000-0000 007F 0xxxxxxx
0000 0080-0000 07FF 110xxxxxxx 10xxxxxx
0000 0800-0000 FFFF 1110xxxxxx 10xxxxxxx 10xxxxxx
0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx
0400 0000-7FFF FFFF 11 110x 10xxxxxx.. 10xxxxxx
Pasos de codificación:
1) Primero determine cuántos 8 bits (octetos) hay
2) Complete cada octeto de acuerdo con lo anterior. plantilla Los bits altos del grupo
3) Rellene el número de caracteres en el octeto. Orden de caracteres: bit bajo → bit alto, orden UTF8: el último bit x del último octeto → el bit más alto x del primer octeto
4) El principio de decodificación es el mismo.
Ejemplo: (Tenga en cuenta el color de cada bit, el texto en negrita es el contenido de la plantilla)
UCS-4 UTF-8
HEX BIN Bytes BIN HEX Bytes
0000 000A 00001010 4 00001010 0A 1
0000 0099 10011001 4 11000010 10011001 C2 99 2
0000 8D99 10001101 1 0011001 4 11101000 10110110 10011001 E8 B6 99 3
No sé si lo entiendes, pero no importa si no lo entiendes. De todos modos, no tienes que hacer los cálculos tú mismo, el programa puede hacer todos los cálculos. trabajar para ti.
El identificador del encabezado del archivo almacenado en formato UTF8 es EF BB BF.
Eficiencia
Según los principios de codificación anteriores, la conclusión es:
1. Cada letra en inglés ocupa 1 byte y cada número ocupa 1 byte;
2. Las letras paneuropeas y cirílicas ocupan 2 bytes;
3. Los caracteres chinos ocupan 3 bytes.
De esto podemos ver que UTF8 es una solución muy atractiva para inglés, pero no es tan rentable para chino. El chino solo está codificado en ANSI o Unicode/UCS2, pero en. UTF8 requiere 3 bytes.
Las siguientes estadísticas muestran el número promedio de bytes necesarios para almacenar cada carácter en un archivo usando UTF8:
1. 1,1 bytes para latín
2. 1,7 bytes para griego, ruso, árabe y hebreo;
3. La mayoría de las otras escrituras (como chino, japonés, coreano e hindi (hindi)) son 3 bytes;
4. La mayoría de los demás textos, como el chino, el japonés, el coreano y el hindi (norte de la India), utilizan alrededor de 3 bytes;
4. Los scripts que utilizan más de 4 bytes rara vez se utilizan.
Unicode (Unicode, Universal Code, Unicode) es una codificación de caracteres utilizada en los ordenadores.
Establece una codificación binaria unificada y única para cada carácter en cada idioma para cumplir con los requisitos de conversión y procesamiento de texto entre idiomas y plataformas.
Unicode fue desarrollado en 1990 y anunciado oficialmente en 1994. Unicode ha ganado popularidad durante la última década a medida que las computadoras se han vuelto más poderosas.
Unicode se basa en el estándar Universal Character Set (UCS) y también está disponible en forma de libro ("Unicode Standard", actualmente en su quinta edición, publicado por Addison-Wesley Professional, ISBN-10: 0321480910 ). 0321480910).
En junio de 2006, la última versión de Unicode es Unicode 4.1.0, publicada el 31 de marzo de 2005. Además, el 12 de diciembre de 2005 se lanzó una versión Beta 5.0 para la evaluación de los miembros.
[Editar] Codificación e implementación Unicode
En términos generales, el sistema de codificación Unicode se puede dividir en dos niveles: método de codificación y método de implementación.
1. Método de codificación
Unicode es un esquema de codificación de caracteres desarrollado por una organización internacional que puede acomodar todos los textos y símbolos del mundo. Unicode asigna estos caracteres a los números 0-0x10FFFF, que pueden contener hasta 1114112 caracteres o 1114112 puntos de código. Los puntos de código son números que se pueden asignar a caracteres. UTF-8, UTF-16 y UTF-32 son esquemas de codificación para convertir números en datos de programa.
El conjunto de caracteres Unicode se puede abreviar como UCS (Conjunto de caracteres Unicode). Los primeros estándares Unicode son UCS-2, UCS-4 (codificados en dos bytes) y UCS-4 (codificados en cuatro bytes). UCS-4 se divide en 2 ^ 7 = 128 grupos según el byte más alto, el bit más alto es 0 y cada grupo se divide en 256 planos según el siguiente byte más alto. Cada plano se divide en 256 filas según el tercer byte, y cada fila tiene 256 bits de codificación (unidades). El plano 0 del Grupo 0 se denomina BMP (Plano Multilingüe Básico). Al eliminar los primeros dos bytes 0 del BMP de UCS-4 se obtiene UCS-2.
Cada plano tiene 2^16=65536 bits de código. Hay 17 aviones utilizados en el esquema Unicode y un **** tiene 17**65536=1114112 puntos de código. En Unicode versión 5.0.0, solo se definen 238605 puntos de código, los cuales se distribuyen en el plano 0, plano 1, plano 2, plano 14, plano 15 y plano 16. Solo existen dos áreas especiales, que se definen en el plano 15. En el plano 16, cada área especial tiene 65534 bits de código, que son 0xF0000-0xFFFFD y 0x10000 y 0x100000-0x10FFFD respectivamente. La denominada "Área Privada" es el área reservada para caracteres personalizados, que puede abreviarse como PUA.
El plano 0 también tiene un "área privada": 0xE000-0xF8FF con 6.400 bits de código. 0xD800-0xDFFF (***2048 bits de código) del plano 0 es un área especial llamada Surrogate. El propósito del área de proxy es representar caracteres distintos de BMP utilizando dos caracteres UTF-16. Esto se describe en la introducción a la codificación UTF-16.
Como se mencionó anteriormente, en Unicode versión 5.0.0, 238605-65534*2-6400-2408=99089.
Los 99089 puntos de código definidos restantes se distribuyen en el plano 0, el plano 1, el plano 2 y el plano 14, correspondientes respectivamente a los 99089 caracteres actualmente definidos por Unicode, incluidos 71226 caracteres chinos. 52080, 3419, 43253 y 337 caracteres se definen en el plano 0, plano 1, plano 2 y plano 14 respectivamente. Los 43253 caracteres del plano 2 son todos caracteres chinos. Hay 27973 caracteres definidos en el plano 0.
2. Implementación
En Unicode: el número correspondiente al carácter chino "字" es 23383. En los programas Unicode, hay muchas formas de representar el número 23383 como datos, incluidos UTF-8, UTF-16 y UTF-32. UTF es la abreviatura de "Formato de conversión UCS", que se puede traducir como Formato de conversión de conjunto de caracteres uniforme, es decir, cómo convertir números definidos por Unicode en datos de programa. Por ejemplo, los números correspondientes a los "caracteres chinos" son 0x6c49 y 0x5b57, y los datos del programa codificados son:
BYTE data_utf8[] = {0xE6, 0xB1, 0x89, 0xE5, 0xAD, 0x97}; / codificación UTF-8
WORD data_utf16[] = {0x6c49, 0x5b57}; // codificación UTF-16
DWORD data_utf32[] = {0x6c49, 0x5b57} // codificación UTF-32<; /p>
BYTE, WORD y DWORD se utilizan aquí para representar enteros de 8 bits sin signo respectivamente. BYTE, WORD y DWORD se utilizan para representar enteros de 8 bits sin signo, enteros de 16 bits sin signo y enteros de 32 bits sin signo respectivamente. BYTE, WORD y DWORD se utilizan respectivamente. Unidades de codificación para UTF-8, UTF-16 y UTF-32. La codificación UTF-8 del carácter chino " requiere 6 bytes. La codificación UTF-16 del carácter chino " requiere dos PALABRAS de 4 bytes. La codificación UTF-32 de "caracteres chinos" requiere dos DWORD de 8 bytes. Dependiendo del orden de los bytes, UTF-16 se puede implementar en forma de UTF-16LE o UTF-16BE, mientras que UTF-32 se puede implementar en forma de. La forma de UTF-32LE o la implementación de UTF-32BE se describen a continuación. UTF-8 codifica Unicode a UTF-8 en bytes. La codificación es la siguiente:
Codificación Unicode (hexadecimal) ║ Flujo de bytes UTF-8 (binario)
000000 - 00007F ║ 0xxxxxxx
000080 - 0007FF ║ 110xxxxx 10xxxxxxx
000800 - 00FFFF ║ 1110xxxxx