UTF-8 frente a UTF-16. Algunos consejos para programadores

Introducción

Con la llegada de los primeros dispositivos para la transmisión digital de información y las computadoras electrónicas, surgió el problema de codificar caracteres de texto utilizando secuencias de unos y ceros. La unidad mínima de presentación de información es el byte. En base a esto, en 1963 en los Estados Unidos, se desarrolló, estandarizó y posteriormente expandió la tabla de códigos ASCII (código estándar estadounidense para el intercambio de información), utilizando una codificación de 8 bits. En primer lugar, con la ayuda de esta tabla, se suponía que debía codificar números y letras del idioma inglés. Los primeros 128 caracteres de la tabla se muestran en la Fig.1:





Figura 1.  Los primeros 128 caracteres de la tabla ASCII.
Figura 1. Los primeros 128 caracteres de la tabla ASCII.

El número de celda en la tabla (Fig. 1) es el código del símbolo. Como ejemplo, considere codificar la palabra Hola. Los números de las celdas de la tabla ASCII en las que se encuentran las letras: 72 (H), 101 (e), 108 (l), 111 (o). El código de la palabra en representación binaria se ve así:





00010 010 ( H ) 10100 110 ( e ) 00110 110 ( l ) 00110 110 ( l ) 11110 110 ( o ) ( bit más significativo a la derecha ).





Los códigos subrayados y en negrita en representación binaria corresponden a los números de celda en la tabla (Fig. 1). El algoritmo de generación de código es el siguiente:





1. – (). 010 – , 011 – .





2. – .





, 128 ASCII , . 128 (8 256 ) . , , 8 .





Unicode () – , ( ) . , ( ) .





.





« » UCS (Universal Coded Character Set), ISO/IEC 10646. UCS , , .





, .. , , UTF (Unicode Transformation Format): UTF-8, UTF-16 UTF-32





UTF-8 – , : 8, 16, 24 32.





UTF-16 – , :16 32.





UTF-8 UTF-16 UCS.





UTF-8

RFC (Request For Comments) 3629. RFC:





0xxxxxxx





110xxxxx 10xxxxxx





1110xxxx 10xxxxxx 10xxxxxx





11110xx 10xxxxxx 10xxxxxx 10xxxxxx





. ( ):





0 – 8- ,





110 – 16- ,





1110 – 24- ,





11110 – 32 .





10 – ( ), .





128 ASCII. 1040-1103.





« Hello».





( ):





00001011 11111001 () 00001011 00001101 () 00001011 11111101 () 00001011 00001101 () 00000100 () 00010010 (H) 10100110 (e) 00110110 (l) 00110110 (l) 11110110 (o).





1055, 10000011111 – 11 . 11010 – . Hello 1 , ASCII.





UTF-8 , , , , .





UTF-16

2000 RFC 2781, UTF-16, 16 32 . 0-55295 57344-65535 16 ( ), , 16, 32 . « Hello».





( ):





11111000 00100000 () 00001100 001000000 () 11111100 00100000 () 00001100 001000000 () 00000100 00000000 () 00010010 00000000 (H) 10100110 00000000 (e) 00110110 00000000 (l) 00110110 00000000 (l) 111110110 00000000 (o).





16 , .





, 65535. , .2:





Figura 2.  Letra del antiguo alfabeto turco.
.2. .

– 68620 (010COC).





UTF-16 :





  1. 010000. 20 . : 010COC – 0x10000 = 0xC0C.





  2. 10 10 . 00 , 00000000110000001100, 10 , – 10 .





  3. 0xD800 (11011000 00000000) 003 (00000000 00000011), 10 , . 0xD800 + 003 =  0D803 (11011000 00000011) – 16 UTF-16.





  4. 0xDC00 (11011000 00000000) 00C (00000000 00001100), 10 , №2. 0xD00 + 00 =  D0 (11011100 00001100) – 16 UTF-16.





  5. UTF-16, , , 3 4: 0D803DC0C (11011000 00000011 11011100 00001100).





UTF-8 UTF-16 ,

1.





1. .





    





0-127





128 - 2047





2048-32767





32768-65535





65535-





1048575





1048575-…





UTF-8





8





16





24





32





32





_





UTF-16





16





16





16





16





32





32





1 , . , 128-2047, 65535-1048575 UTF-8 UTF-16 . 0-127 UTF-8, , , . 2048-32767 32768-65535 UTF-16, , , ( 12549-12589). , , 1048575 UTF-16. 





« Hello» UTF-8 UTF-16. UTF-8 14 , UTF-16 20 , - 000. , , UTF-8.





: UTF-8, UTF-16. UTF-8, , .





, , . 12549-12589 , , UTF-16 . , , , . – button. - , . :





1. , , . , , , .





2.  . , . UTF-16. .





3. , -, – , – . , , , , .





, . , ü , , 252 : u, 117 ¨, 776. . , . , u, , ü, u.








All Articles