• No se han encontrado resultados

Codificación UTF-8 del juego de caracteres ISO (Latin-1)

N/A
N/A
Protected

Academic year: 2022

Share "Codificación UTF-8 del juego de caracteres ISO (Latin-1)"

Copied!
9
0
0

Texto completo

(1)

Codificación UTF-8 del juego de caracteres ISO-8859-1 (Latin-1)

Manuel J. Fernández Iglesias https://desire.webs.uvigo.gal

Resumen

El juego de caracteres ISO-8859-1, también llamado Latin-1, es un conjunto de caracteres de 8 bits que incluye los caracteres utilizados en los alfabetos de Europa occidental. UTF-8 es un formato de codi- ficación de caracteres que utiliza secuencias de longitud variable. Los caracteres ASCII tradicionales de 7 bits (caracteres ISO-8859-1 de 0x00 a 0x7F) se codifican en UTF-8 con códigos de solo un byte coinciden- tes con los códigos ASCII. El resto de los códigos ISO-8859-1 (de 0x80 a 0xfF) se codifican con dos bytes. Este documento desarrolla la co- dificación UTF-8 del repertorio ISO-8859-1.

1. Introducción

El juego de caracteres ISO-8859-1, también llamado Latin-1, es un conjun- to de caracteres de 8 bits o 256 caracteres respaldado por la Organización Internacional de Normalización (ISO) que incluye los caracteres utilizados en los alfabetos de los idiomas de Europa occidental. Como su nombre lo indi- ca, es un subconjunto de ISO-8859, que incluye otros juegos de caracteres de sistemas de escritura como el cirílico, el hebreo o el árabe. Hasta la popula- rización de la codificación UTF-8, era la codificación utilizado por la mayoría de los sistemas Unix, así como por el sistema operativo Microsoft Windows.

Este juego de caracteres se conoce también como ASCII extendido debido a que los primeros 128 caracteres de su conjunto son idénticos al estándar AS- CII desarrollado por la Asociación Americana de Normalización, actualmente el Instituto Nacional Americano de Normalización (ANSI).

Bajo licencia Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0) (la “Licencia”). Sólo es posible utilizar este material de acuerdo con la Licencia.

Se puede distribuir libremente y sin coste tal como está, en su lenguaje original (https://

(2)

UTF-8 (8-bit Unicode Transformation Format) es un formato de codifica- ción de caracteres que utiliza secuencias de longitud variable. Se correspon- de con el estándar RFC 3629 de la Internet Engineering Task Force (IETF).

Entre las ventajas de UTF-8 está la de incluir directamente los caracteres ASCII tradicionales de 7 bits (caracteres ISO-8859-1 de0x00a0x7F), por lo que cualquier mensaje ASCII se representa sin cambios. UTF-8 también sir- ve para codificar con 2, 3 o 4 bits la práctica totalidad de símbolos de uso común, como los caracteres de cualquier alfabeto (latino, cirílico, chino, ja- ponés, coreano, etc.) o los símbolos matemáticos.

En el caso concreto del juego ISO-8859-1, los 128 caracteres restantes (caracteres de0x80 a0xFF) correspondientes en su mayoría a caracteres de los idiomas de Europa occidental no incluidos en el repertorio ASCII, se codifican con dos bytes de acuerdo con el modelo presentado en el cuadro 1.

Cuadro 1. Codificación de los caracteres ISO-8859-1 (códigos 0x00 – 0xFF) según UTF-8.

Rango UTF-8 (binario) Comentarios

0x00-0x7F 0b0xxxxxxx Caracteres ASCII de 7 bits.

0x80-0xFF 0b110yyyyy 0b10xxxxxx Caracteres acentuados y otros símbolos de uso común.

Este documento recoge los caracteres del repertorio ISO-8859-1 y se de- talla su codificación en el sistema UTF-8.

2. Codificación del repertorio ASCII (

0x00

a

0x7F

)

Los caracteres del primer grupo (vid. cuadros 4 y 5) se corresponden con los caracteres ASCII originales de 7 bits. Se trata pues de símbolos de un úni- co byte cuyo bit más significativo es 0. Se agrupan a su vez en caracteres de control, dígitos y signos de puntuación, mayúsculas y caracteres especiales y minúsculas y caracteres especiales, tal como se recoge en el cuadro 2.

Cuadro 2. Agrupación de los caracteres ISO-8859-1/ASCII del rango0x000x7F.

Codificación Grupo

0b000X XXXX Caracteres de control.

0b001X XXXX Dígitos y signos de puntuación.

0b010X XXXX Mayúsculas y caracteres especiales.

0b011X XXXX Minúsculas y caracteres especiales.

(3)

3. Codificación del repertorio extendido (

0x80

a

0xFF

)

Los caracteres del segundo grupo (vid. cuadros 6 y 7) son caracteres que solían definirse como caracteres ASCII extendidos, codificados en un byte con el bit más significativo a 1 (i.e., valores de0x80a0xFF). La codificación UTF-8 en 2 bytes se realiza de la siguiente manera:

0b0000 0000 XXXX YYYY0b1100 00XX 10XX YYYY

Por ejemplo, la letra “ñ” cuyo código Latin-1 es0xF1se codificaría como (vid. cuadro 7 en la página 7):

0b0000 0000 1111 00010b1100 0011 1011 0001

Es decir, como0xC3B1. La razón de esta transformación es para garanti- zar otra de las propiedades del sistema de codificación UTF-8 llamada no su- perposición, que consiste en que los conjuntos de valores que puede tomar cada byte de un carácter multibyte son disjuntos, por lo que no es posible confundirlos entre sí. En otras palabras, no es posible por ejemplo confun- dir ningún símbolo UTF-8 de un byte con el primer o el segundo byte de un símbolo de dos bytes. Además, en una transmisión de símbolos UTF-8 es posible determinar el inicio de cada símbolo sin reiniciar la lectura desde el principio de la transmisión.

En los cuadros 6 y 7 se sustituye el valor en decimal por el valor del código ISO-8859-1 en hexadecimal, ya que en este caso este dato es mucho más informativo que dicho valor en decimal. En todos estos cuadros, la columna ISO refleja el código correspondiente del repertorio ISO-8859-1.

La distribución de códigos y glifos de estos cuadros es la recogida en el cuadro 3. Podemos observar que las mayúsculas y minúsculas se diferen- cian en un solo bit, el mismo que en el caso de los caracteres ASCII del bloque 0x400x7F.

Cuadro 3. Agrupación de los caracteres ISO-8859-1/UTF-8 del rango0x800xFF.

Codificación Grupo

0xC2 0b100X XXXX Controles C1 (ISO-8859-1) y símbolos (UTF-8).

0xC2 0b101X XXXX Símbolos UTF-8

0xC3 0b100X XXXX Mayúsculas adicionales UTF-8.

0xC3 0b101X XXXX Minúsculas adicionales UTF-8.

Finalmente, los cuadros 8 y 9 recogen los caracteres alfabéticos utiliza- dos en castellano, gallego y portugués.

(4)

Cuadro 4. Caracteres UTF-8 de 0x00 a 0x3F. Caracteres de control, dígitos y signos de puntuación. La codificación CP437 utilizada por el PC de IBM original, utilizaba los caracteres de control de (soh) a (us) para definir los caracteres imprimibles del cuadro. El carácter correspondiente a (nul) no formaba parte del CP437 original.

Dec Hex Sim Ctl Dec Hex Char

0 0x00 ␀ (nul) 32 0x20

1 0x01 ␁ (soh) 33 0x21 !

2 0x02 ␂ (stx) 34 0x22 "

3 0x03 ␃ (etx) 35 0x23 #

4 0x04 ␄ (eot) 36 0x24 $

5 0x05 ␅ (enq) 37 0x25 %

6 0x06 ␆ (ack) 38 0x26 &

7 0x07 ␇ (bel) 39 0x27 '

8 0x08 ␈ (bs) 40 0x28 (

9 0x09 (tab) 41 0x29 )

10 0x0A ␊ (lf) 42 0x2A *

11 0x0B ␋ (vt) 43 0x2B +

12 0x0C (ff) 44 0x2C

13 0x0D ␍ (cr) 45 0x2D -

14 0x0E ␎ (so) 46 0x2E .

15 0x0F ␏ (si) 47 0x2F /

16 0x10 ␐ (dle) 48 0x30 0

17 0x11 ␑ (dc1) 49 0x31 1

18 0x12 ␒ (dc2) 50 0x32 2

19 0x13 ␓ (dc3) 51 0x33 3

20 0x14 ␔ (dc4) 52 0x34 4

21 0x15 ␕ (nak) 53 0x35 5

22 0x16 ␖ (syn) 54 0x36 6

23 0x17 ␗ (etb) 55 0x37 7

24 0x18 ␘ (can) 56 0x38 8

25 0x19 ␙ (em) 57 0x39 9

26 0x1A (eof) 58 0x3A :

27 0x1B ␛ (esc) 59 0x3B ;

28 0x1C ␜ (fs) 60 0x3C <

29 0x1D ␝ (gs) 61 0x3D =

30 0x1E ␞ (rs) 62 0x3E >

31 0x1F ␟ (us) 63 0x3F ?

(5)

Cuadro 5. Caracteres UTF-8 de 0x40 a 0x7F. Mayúsculas, minúsculas y caracteres especiales.

Dec Hex Char Dec Hex Char

64 0x40 @ 96 0x60

65 0x41 A 97 0x61 a

66 0x42 B 98 0x62 b

67 0x43 C 99 0x63 c

68 0x44 D 100 0x64 d

69 0x45 E 101 0x65 e

70 0x46 F 102 0x66 f

71 0x47 G 103 0x67 g

72 0x48 H 104 0x68 h

73 0x49 I 105 0x69 i

74 0x4A J 106 0x6A j

75 0x4B K 107 0x6B k

76 0x4C L 108 0x6C l

77 0x4D M 109 0x6D m

78 0x4E N 110 0x6E n

79 0x4F O 111 0x6F o

80 0x50 P 112 0x70 p

81 0x51 Q 113 0x71 q

82 0x52 R 114 0x72 r

83 0x53 S 115 0x73 s

84 0x54 T 116 0x74 t

85 0x55 U 117 0x75 u

86 0x56 V 118 0x76 v

87 0x57 W 119 0x77 w

88 0x58 X 120 0x78 x

89 0x59 Y 121 0x79 y

90 0x5A Z 122 0x7A z

91 0x5B [ 123 0x7B {

92 0x5C \ 124 0x7C |

93 0x5D ] 125 0x7D }

94 0x5E ˆ 126 0x7E ˜

95 0x5F _ 127 0x7F

(6)

Cuadro 6. Caracteres UTF-8 de 0xC280 a 0xC2BF. Símbolos varios. En Latin-1, los primeros 32 caracteres son caracteres de control no imprimibles conocidos como Controles C1. La columna Sim identifica los glifos asignados en UTF-8 en este caso. Para los 32 últimos caracteres, la columna Dif representa las diferencias entre UTF-8/Latin-1 (columna Sim) e ISO Latin 9.

ISO UTF-8 Ctl Sim ISO UTF-8 Sim Dif

0x80 0xC280 (pad) € 0xA0 0xC2A0   0x81 0xC281 (hop) 0xA1 0xC2A1 ¡ 0x82 0xC282 (bph) ‚ 0xA2 0xC2A2 ¢ 0x83 0xC283 (nbh) ƒ 0xA3 0xC2A3 £ 0x84 0xC284 (ind) „ 0xA4 0xC2A4 ¤ € 0x85 0xC285 (nel) ... 0xA5 0xC2A5 ¥ 0x86 0xC286 (ssa) † 0xA6 0xC2A6 ¦ Š 0x87 0xC287 (esa) ‡ 0xA7 0xC2A7 § 0x88 0xC288 (hts ^ 0xA8 0xC2A8 ¨ š 0x89 0xC289 (htj) ‰ 0xA9 0xC2A9 © 0x8A 0xC28A (lts) Š 0xAA 0xC2AA a 0x8B 0xC28B (pld) ‹ 0xAB 0xC2AB « 0x8C 0xC28C (plu) Œ 0xAC 0xC2AC ¬ 0x8D 0xC28D (ri) 0xAD 0xC2AD 0x8E 0xC28E (ss2) Ž 0xAE 0xC2AE ® 0x8F 0xC28F (ss3) 0xAF 0xC2AF ¯ 0x90 0xC290 (dcs) 0xB0 0xC2B0 ° 0x91 0xC291 (pu1) ‘ 0xB1 0xC2B1 ± 0x92 0xC292 (pu2) ’ 0xB2 0xC2B2 ² 0x93 0xC293 (sts) “ 0xB3 0xC2B3 ³ 0x94 0xC294 (cch) ” 0xB4 0xC2B4 ´ Ž 0x95 0xC295 (mw) • 0xB5 0xC2B5 µ 0x96 0xC296 (spa) – 0xB6 0xC2B60x97 0xC297 (epa) — 0xB7 0xC2B7 · 0x98 0xC298 (sos) ~ 0xB8 0xC2B8 ¸ ž 0x99 0xC299 (sgci) ™ 0xB9 0xC2B9 ¹ 0x9A 0xC29A (sci) š 0xBA 0xC2BA º 0x9B 0xC29B (csi) › 0xBB 0xC2BB » 0x9C 0xC29C (st) œ 0xBC 0xC2BC ¼ Œ 0x9D 0xC29D (osc) 0xBD 0xC2BD ½ œ 0x9E 0xC29E (pm) ž 0xBE 0xC2BE ¾ Ÿ 0x9F 0xC29F (apc) Ÿ 0xBF 0xC2BF ¿

(7)

Cuadro 7. Caracteres UTF-8 de 0xC380 a 0xC3BF. Caracteres acentuados conocidos como Suplemento Latin-1. Podemos observar que las mayúsculas y minúsculas se diferencian en un solo bit, el mismo que en el caso de los caracteres ASCII (bloque 0x40 a 0x7F).

ISO UTF-8 Char ISO UTF-8 Char

0xC0 0xC380 À 0xE0 0xC3A0 à 0xC1 0xC381 Á 0xE1 0xC3A1 á 0xC2 0xC382 Â 0xE2 0xC3A2 â 0xC3 0xC383 Ã 0xE3 0xC3A3 ã 0xC4 0xC384 Ä 0xE4 0xC3A4 ä 0xC5 0xC385 Å 0xE5 0xC3A5 å 0xC6 0xC386 Æ 0xE6 0xC3A6 æ 0xC7 0xC387 Ç 0xE7 0xC3A7 ç 0xC8 0xC388 È 0xE8 0xC3A8 è 0xC9 0xC389 É 0xE9 0xC3A9 é 0xCA 0xC38A Ê 0xEA 0xC3AA ê 0xCB 0xC38B Ë 0xEB 0xC3AB ë 0xCC 0xC38C Ì 0xEC 0xC3AC ì 0xCD 0xC38D Í 0xED 0xC3AD í 0xCE 0xC38E Î 0xEE 0xC3AE î 0xCF 0xC38F Ï 0xEF 0xC3AF ï 0xD0 0xC390 Ð 0xF0 0xC3B0 ð 0xD1 0xC391 Ñ 0xF1 0xC3B1 ñ 0xD2 0xC392 Ò 0xF2 0xC3B2 ò 0xD3 0xC393 Ó 0xF3 0xC3B3 ó 0xD4 0xC394 Ô 0xF4 0xC3B4 ô 0xD5 0xC395 Õ 0xF5 0xC3B5 õ 0xD6 0xC396 Ö 0xF6 0xC3B6 ö 0xD7 0xC397 × 0xF7 0xC3B7 ÷ 0xD8 0xC398 Ø 0xF8 0xC3B8 ø 0xD9 0xC399 Ù 0xF9 0xC3B9 ù 0xDA 0xC39A Ú 0xFA 0xC3BA ú 0xDB 0xC39B Û 0xFB 0xC3BB û 0xDC 0xC39C Ü 0xFC 0xC3BC ü 0xDD 0xC39D Ý 0xFD 0xC3BD ý 0xDE 0xC39E Þ 0xFE 0xC3BE þ 0xDF 0xC39F ß 0xFF 0xC3BF ÿ

(8)

Cuadro 8. Caracteres UTF-8 alfabéticos utilizados en castellano, gallego y portugués (I).

ISO Hex Char ISO Hex Char

65 0x41 A 97 0x61 a

66 0x42 B 98 0x62 b

67 0x43 C 99 0x63 c

68 0x44 D 100 0x64 d

69 0x45 E 101 0x65 e

70 0x46 F 102 0x66 f

71 0x47 G 103 0x67 g

72 0x48 H 104 0x68 h

73 0x49 I 105 0x69 i

74 0x4A J 106 0x6A j

75 0x4B K 107 0x6B k

76 0x4C L 108 0x6C l

77 0x4D M 109 0x6D m

78 0x4E N 110 0x6E n

79 0x4F O 111 0x6F o

80 0x50 P 112 0x70 p

81 0x51 Q 113 0x71 q

82 0x52 R 114 0x72 r

83 0x53 S 115 0x73 s

84 0x54 T 116 0x74 t

85 0x55 U 117 0x75 u

86 0x56 V 118 0x76 v

87 0x57 W 119 0x77 w

88 0x58 X 120 0x78 x

89 0x59 Y 121 0x79 y

90 0x5A Z 122 0x7A z

(9)

Cuadro 9. Caracteres UTF-8 alfabéticos utilizados en castellano, gallego y portugués (II).

ISO UTF-8 Char ISO UTF-8 Char

0xC0 0xC380 À 0xE0 0xC3A0 à 0xC1 0xC381 Á 0xE1 0xC3A1 á 0xC2 0xC382 Â 0xE2 0xC3A2 â 0xC3 0xC383 Ã 0xE3 0xC3A3 ã 0xC7 0xC387 Ç 0xE7 0xC3A7 ç 0xC9 0xC389 É 0xE9 0xC3A9 é 0xCA 0xC38A Ê 0xEA 0xC3AA ê 0xCD 0xC38D Í 0xED 0xC3AD í 0xD1 0xC391 Ñ 0xF1 0xC3B1 ñ 0xD3 0xC393 Ó 0xF3 0xC3B3 ó 0xD4 0xC394 Ô 0xF4 0xC3B4 ô 0xD5 0xC395 Õ 0xF5 0xC3B5 õ 0xDA 0xC39A Ú 0xFA 0xC3BA ú 0xDC 0xC39C Ü 0xFC 0xC3BC ü

Referencias

Documento similar