charsets(7) Miscellaneous Information Manual charsets(7) NOMBRE charsets - internacionalizacion y estandares de conjuntos de caracteres DESCRIPCION Esta pagina de manual proporciona un breve repaso a los distintos estandares de codificacion de caracteres y el modo en que se emplearon en Linux antes de que Unicode los reemplazase a todos. Alguna de esta informacion continua siendo util para las personas que trabajen con equipo o documentacion antiguos. Los estandares que se comentan son: ASCII, GB 2312, ISO/IEC 8859, JIS, KOI8-R, KS, y Unicode. Se enfatiza principalmente en las codificaciones que se pueden encontrar actualmente en las distintas localizaciones en lugar de en la miriada de ellas que pueden encontrarse en otros sistemas. ASCII ASCII (American Standard Code For Information Interchange) es el conjunto original de caracteres de 7 bits, originalmente disenado para el ingles americano, tambien conocido como US-ASCII. Actualmente se define en la norma la ISO/IEC 646:1991 IRV (International Reference Version). Existen diversas variantes del ASCII de 7 bits que reemplazan el signo del dolar por otros simbolos monetarios y caracteres de puntuacion con caracteres alfabeticos no ingleses para cubrir el aleman, frances, espanol y otros. No se recomienda usar ningun de ellos; la libc de GNU no soporta localizaciones cuyos conjuntos de caracteres no sean verdaderos superconjuntos del ASCII. Si se usa UTF-8, Unicode es compatible con ASCII por lo que el antiguo ASCII se vera perfectamente en sistemas modernos que utilicen UTF-8. ISO/IEC 8859 ISO/IEC 8859 es una serie de 15 conjuntos de caracteres de 8 bits, todos los ellos formados por ASCII en su inferior (7 bits), caracteres invisibles de control en las posiciones 128 a 159, y 96 graficos de ancho fijo en posiciones 160-255. De estos, el mas importante es ISO/IEC 8859-1 'Alfabeto Latino No. 1' / Latin-1). Gozo de un amplisimo grado de soporte por diferentes sistemas pero en la actualidad esta siendo sustituido gradualmente por Unicode. Los caracteres de ISO/IEC 8859-1 son tambien los primeros 256 caracteres de Unicode. El soporte de la consola para los otros conjuntos de caracteres ISO/IEC 8859 esta disponible en Linux en varias utilidades (como setfont(8)) que modifican las relaciones entre el teclado y la tabla grafica EGA y emplean la tabla de fuentes 'user mapping' en el driver de la consola. Aqui se presentan breves descripciones de cada conjunto: ISO/IEC 8859-1 (Latin-1) Latin-1 cubre la mayoria de lenguajes de Europa Occidental como el albanes, vasco, danes, ingles, feroes, gallego, islandes, irlandes, italiano, noruego, portugues, espanol y sueco. La falta de las ligaduras neerlandesas IJ/ij, de la francesa oe y de las antiguas comillas alemanas ,," se consideraba aceptable. ISO/IEC 8859-2 (Latin-2) Latin-2 es el soporte para la mayoria de las lenguas eslavas y de Centro-Europa que se escriben con caracteres latinos: checo, aleman, hungaro, polaco, rumano, croata, eslovaco y esloveno. Se consideraba aceptable tener que sustituir los caracteres rumanos / con s/t. ISO/IEC 8859-3 (Latin-3) El latin-3 fue disenado para gestionar el esperanto, maltes y turco, pero ISO/IEC 8859-9 fue empleado con posterioridad para el turco. ISO/IEC 8859-4 (Latin-4) El latin-4 incoroporo letras para lenguas del norte de Europa como el estoniano, el leton y el lituano. Poseriormente sustituido por ISO/IEC 8859-10 e ISO/IEC 8859-13. ISO/IEC 8859-5 Letras cirilicas para el bulgaro, bielorruso, macedonio, ruso, serbio y (casi por completo) ucraniano. Nunca tuvo un amplio uso. Vea la discusion sobre el KOI8-R/KOI8-U mas adelante. ISO/IEC 8859-6 Fue creado para el arabe. La tabla de glifos ISO/IEC 8859-6 es un tipo de letra fijo de formas de letra separadas, pero un visor adecuado deberia combinarlas usando las formas inicial, medial y final adecuadas. ISO/IEC 8859-7 Fue creado para el griego actual en 1987 y posteriormente actualizado en el ano 2003. ISO/IEC 8859-8 Para el hebreo moderno sin 'niqud' (signos de puntuacion). Los 'niqud' y el hebreo biblico 'oficial' se encuentran fuera del ambito de este conjunto de caracteres; en Linux se prefiere la codificacion UTF-8 para esto. ISO/IEC 8859-9 (Latin-5) Esta es una variante del Latin-1 que reemplaza letras islandesas con otras turcas. ISO/IEC 8859-10 (Latin-6) El Latin 6 anade las ultimas letras del inuit (esquimal de Groenlandia) y del sami (lapon) que faltaban en el Latin 4 para cubrir toda el area nordica. ISO/IEC 8859-11 Implementa el alfabeto tailandes y es practicamente identico al estandar TIS-620. ISO/IEC 8859-12 Este conjunto de caracteres no existe. ISO/IEC 8859-13 (Latin-7) Para las lenguas de la Ribera del Baltico; en particular, incluye los caracteres letones que no se encuentran en Latin-4. ISO/IEC 8859-14 (Latin-8) Este es el conjunto de caracteres celta, que implementa: el antiguo irlandes, el gaelico manx, el gales, el gaelico, el cornualles y el breton. ISO/IEC 8859-15 (Latin-9) Latin-9 es parecido al -enormemente usado- Latin-1 salvo que reemplaza algunos de los simbolos menos usados con el simbolo del euro y algunos caracteres franceses y finlandeses no incuidos en Latin-1. ISO/IEC 8859-16 (Latin-10) Este conjunto abarca muchos idiomas del sudeste de Europa y, lo que es mas importante: tiene mejor soporte para el rumano que Latin-2. KOI8-R / KOI8-U KOI8-R es un conjunto de caracteres no ISO muy usado en Rusia antes de Unicode. La primera mitad esta formada por ASCII y la segunda es un conjunto de caracteres cirilicos algo mejor disenado que ISO/IEC 8859-5. KOI8-U, basado en KOI8R, tiene un mejor soporte para el ucraniano. Ninguno de estos conjuntos son compatibles con ISO/IEC 2022, a diferencia de la serie ISO / IEC 8859. El soporte de consola para el KOI8-R esta disponible en Linux a traves de utilidades de usuario (como setfont(8)) que modifican las asociaciones de teclas y la tabla de graficos EGA y emplean la tabla de tipos de letra de "correspondencia de usuario" en el controlador de consola. GB 2312 GB 2312 es un conjunto nacional estandar de caracteres para el chino continental que se usa para expresar chino simplificado. Al igual que JIS X 0208, los caracteres se proyectan en una matriz de 94x94 celdas de dos bytes que se usa para construir la codificacion EUC-CN. EUC-CN es la codificacion mas importante para Linux e incluye ASCII y GB 2312. Dese cuenta que EUC-CN frecuentemente se identifica como GB, GB 2312 o CN-GB. Big5 Big5 fue un conjunto de caracteres muy usado en Taiwan para expresar el chino tradicional, es al mismo tiempo un conjunto de caracteres y una codificacion. Es un superconjunto de ASCII. Los caracteres no ASCII se expresan en dos bytes. Los bytes 0xa1-0xfe se utilizan como bytes principales para caracteres de dos bytes. Big5 y su extension fueron ampliamente utilizados en Taiwan y Hong Kong. No es compatible con ISO/IEC 2022. JIS X 0208 JIS X 0208 es el principal conjunto de caracteres estandar en Japon. Aunque hay algunos estandar nacionales japoneses mas (como JIS X 0201, X 0212, y X 0213). Los caracteres se crean a partir de una matriz de dos bytes de 94x94, cada byte esta en el intervalo 0x21-0x7e. Debe considerarse que JIS X 0208 es un conjunto de caracteres, no una codificacion. Esto significa que el propio JIS X 0208 no se utiliza para expresar datos de texto. JIS X 0208 forma parte de codificaciones como EUC-JP, Shift_JIS y ISO/IEC 2022-JP. EUC-JP es la codificacion mas importante para Linux e incluye ASCII y JIS X 0208. En EUC-JP, los caracteres JIS X 0208 se expresan en dos bytes, cada uno de los cuales es el codigo JIS x 0208, mas 0x80. KS X 1001 KS X 1001 es un conjunto de caracteres estandar nacional de Corea. Al igual que JIS X 0208, los caracteres se mapean en una matriz de dos bytes de 94x94. KS X 1001 se utiliza como JIS X 0208, como un componente para construir codificaciones como EUC-KR, Johab y ISO/IEC 2022-KR. EUC-KR es la codificacion mas importante para Linux e incluye ASCII y KS X 1001. KS C 5601 es como anteriormente se conocia a KS X 1001. ISO/IEC 2022 e ISO/ IEC 4873 Las normas ISO/IEC 2022 y ISO/IEC 4873 describen un modelo de control de fuentes basado en la practica VT100. Este modelo esta (parcialmente) soportado por el nucleo de Linux y por xterm(1). Se han definido varias codificaciones de caracteres basadas en ISO/IEC 2022, especialmente para el japones. Hay 4 conjuntos de caracteres graficos, llamados G0, G1, G2 y G3, y uno de ellos es el conjunto de caracteres actual para los codigos con el bit mas alto a 0 (inicialmente G0), y uno de ellos es el conjunto de caracteres actual para los codigos con el bit mas alto a 1 (inicialmente G1). Cada conjunto de caracteres grafico tiene 94 o 96 caracteres, y es esencialmente un conjunto de caracteres de 7 bits. Emplea codigos bien entre 040-0177 (041-0176) o bien entre 0240-0377 (0241-0376). G0 siempre tiene de tamano 94 y emplea codigos en el rango 041-0176. El cambio entre los conjuntos de caracteres se realiza empleando las funciones de cambio ^N (SO o LS1), ^O (SI o LS0), ESC n (LS2), ESC o (LS3), ESC N (SS2), ESC O (SS3), ESC ~ (LS1R), ESC } (LS2R), ESC | (LS3R). La funcion LSn hace que el conjunto de caracteres Gn sea el actual para los codigos con el bit mas alto a 0. La funcion LSn hace que el conjunto de caracteres Gn sea el actual para los codigos con el bit mas alto a 1. La funcion SSn hace que el conjunto de caracteres Gn (n=2 o 3) sea el actual para el siguiente caracter solamente (tenga lo que tenga su bit mas alto). Un conjunto de 94 caracteres se designa como caracter Gn definido por una secuencia de escape ESC ( xx (para G0), ESC ) xx ( para G1), ESC * xx (Para G2), ESC + xx ( Para G3), donde xx es un simbolo o un par de simbolos que se encuentran en ISO/IEC 2375 Registro Internacional de conjuntos de caracteres codificados. Por ejemplo, ESC ( @ selecciona el conjunto de caracteres ISO/IEC 646 como G0, ESC ( A selecciona la serie de caracteres estandar del Reino Unido (con la libra en lugar del signo numerico), ESC ( B selecciona ASCII (con el dolar en lugar del simbolo de moneda), ESC ( M selecciona un conjunto de simbolos para lenguas africanas, ESC ) (! Un conjunto de 96 caracteres se designa como el conjunto de caracteres Gn por una secuencia de escape ESC - xx (para G1), ESC . xx (para G2) o ESC / xx (para G3). Por ejemplo, ESC - G selecciona el alfabeto hebreo como el G1. Un conjunto de caracteres multibyte se designa como el conjunto de caracteres Gn por una secuencia de escape ESC $ xx o ESC $ ( xx (para G0), ESC $ ) xx (para G1), ESC $ * xx (para G2), ESC $ + xx (para G3). Por ejemplo, ESC $ ( C selecciona el conjunto de caracteres coreano para G0. El conjunto de caracteres japones seleccionado por ESC $ B tiene una version mas reciente seleccionada por ESC & @ ESC $ B. ISO/IEC 4873 estipula un uso mas restrictivo de conjuntos de caracteres, donde G0 es fijo (siempre ASCII), de modo que G1, G2, y G3 solo pueden ser invocados para codigos con el conjunto de bits de orden alto. Concretamente, [ha]N y ^O ya no se usan, ESC ( xx puede usarse solo con xx=B, y ESC ) xx, ESC * xx, Esc + xx son equivalentes a ESC - xx, ESC. xx, ESS / xx, respectivamente. TIS-620 TIS-620 es un conjunto de caracteres estandar nacional para el tailandes y un superconjunto de ASCII. De la mismo modo que la serie ISO/IEC 8859, los caracteres tailandeses se mapean en 0xa1-0xfe. Unicode Unicode (ISO/IEC 10646) es un estandar cuyo objetivo es representar inequivocamente cada caracter conocido en cada lenguaje humano. La estructura de Unicode admite 20'1 bits para codificar cada caracter. Sin embargo, ya que la mayoria de los computadores no incluyen enteros de 20'1 bits, normalmente Unicode se codifica internamente mediante enteros de 32 bits y, o bien una serie de enteros de 16 bits (UTF-16) (que necesita dos enteros de 16 bits solo cuando se codifican ciertos caracteres poco comunes), o bien una serie de bytes de 8 bits (UTF-8). Linux representa Unicode empleando el Formato de Transformacion Unicode de 8 bits (UTF-8). UTF-8 es una codificacion de Unicode de longitud variable. Emplea 1 byte para codificar 7 bits, 2 bytes para 11 bits, 3 bytes para 16 bits, 4 bytes para 21 bits, 5 bytes para 26 bits, y 6 bytes para 31 bits. Sean 0, 1, x el 0, el 1 o un bit arbitrario. Un byte 0xxxxxxx representa el caracter Unicode 00000000 0xxxxxxx que codifica el mismo simbolo que el ASCII 0xxxxxxx. Asi, ASCII va sin cambio alguno dentro de UTF-8, y la gente que emplea ASCII no nota ningun cambio: ni en el codigo ni en tamanos de fichero. Un byte 110xxxxx es el comienzo de un codigo de 2 bytes, y 110xxxxx 10yyyyyy se ensambla en 00000xxx xxyyyyyy. Un byte 1110xxxx es el comienzo de un codigo de 3 bytes, y 1110xxxx 10yyyyyy 10zzzzzz se ensambla en xxxxyyyy yyzzzzzz. (Cuando se emplea UTF-8 para codificar el ISO/IEC 10646 de 31 bits, esta progresion continua hasta codigos de 6 bytes.) Para la mayoria de los textos en los conjuntos de caracteres ISO/IEC 8859, significara que los caracteres no ASCII estan ahora codificados con dos bytes. Esto tiende a incrementar entorno al 1 o 2 por cien los archivos de texto ordinarios. Para los textos en ruso o griego el incremento es del 100%, ya que los caracteres empleados son principalmente no ASCII. Para los usuarios japoneses esto significa que los codigos de 16 bits tomaran tres bytes. Si bien existen conversiones algoritmicas de algunos conjuntos de caracteres (especialmente ISO/IEC 8859-1) a Unicode, la conversion general requiere el uso de tablas de conversion, que pueden ser bastante grandes para codigos de 16 bits. Observe que UTF-8 es auto-sincronizante: 10xxxxxx es una cola, y cualquier otro byte es la cabeza de un codigo. Observe que de la unica manera que los bytes ASCII aparecen en un flujo UTF-8 es como ellos mismos. En particular, no hay NULs ('\0') or '/'s incluidos que formen parte de algun codigo mas grande. Puesto que ASCII, y, en particular, NUL y '/', permanecen inalterados, el nucleo no se entera de que se esta empleando UTF-8. No le importa en absoluto para que son los bytes que esta manejando. La representacion de los flujos de datos Unicode se suele gestionar a traves de tablas de `subtipo' que hacen corresponder un subconjunto de Unicode a glifos. Internamente el nucleo emplea Unicode para describir el subtipo de letra cargada en RAM de video. Esto significa que en el modo UTF-8 uno puede emplear un conjunto de caracteres con 512 simbolos diferentes. Esto no es suficiente para el japones, chino o coreano, pero si es adecuado para la mayoria de otros propositos. VEASE TAMBIEN iconv(1), ascii(7), iso_8859-1(7), unicode(7), utf-8(7) TRADUCCION La traduccion al espanol de esta pagina del manual fue creada por Gerardo Aburruzaga Garcia , Juan Piernas , Miguel Perez Ibars y Marcos Fouces Esta traduccion es documentacion libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD. Si encuentra algun error en la traduccion de esta pagina del manual, envie un correo electronico a . Paginas de Manual de Linux 6.8 2 Mayo 2024 charsets(7)