Provided by:
manpages-es_1.55-10_all 
NOMBRE
charsets - internacionalizacion y conjuntos de caracteres desde el
punto de vista del programador
DESCRIPCI'ON
Linux es un sistema operativo internacional. Varias de sus utilidades y
controladores (``drivers'') de dispositivos (incluyendo el de la
consola) admiten conjuntos de caracteres multilingues, que incluyen
letras del alfabeto latino con marcas diacriticas, acentos y ligaduras,
y alfabetos enteros no latinos incluyendo el griego, cirilico, arabe y
hebreo.
Esta pagina de manual presenta una vision de los estandares de
conjuntos de caracteres desde el punto de vista del programador y como
encajan todos juntos en Linux. Los estandares que se tratan incluyen el
ASCII, ISO 8859, KOI8-R, Unicode, ISO 2022 e ISO 4873. Vamos a hacer
enfasis en aquellos conjuntos de caracteres que se usan realmente como
conjuntos de caracteres de localizacion, no en los miles de aquellos
que podemos encontrar en datos procedentes de otros sistemas.
Una lista completa de los conjuntos de caracteres usados en una
localizacion oficialmente soportada en glibc 2.2.3 es:
ISO-8859-{1,2,3,5,6,7,8,9,13,15}, CP1251, UTF-8, EUC-{KR,JP,TW},
KOI8-{R,U}, GB2312, GB18030, GBK, BIG5, BIG5-HKSCS y TIS-620 (sin
ningun orden particular.) (El rumano se puede cambiar al ISO-8859-16.)
ASCII
ASCII (American Standard Code For Information Interchange, Codigo
Estandar Americano para el Intercambio de Informacion) es el conjunto
de caracteres original de 7 bits, disenado inicialmente para el ingles
americano. Actualmente se describe en el estandar ECMA-6.
Existen varias 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. (Estos conjuntos tambien se
conocen como ISO-646, un pariente cercano del ASCII que permite
reemplazar estos caracteres.)
Como Linux fue escrito para equipos disenados en los EE.UU., admite
ASCII de modo nativo.
ISO 8859
ISO 8859 es una serie de 15 conjuntos de caracteres de 8 bits, los
cuales tienen como su primera mitad (7 bits) el US ASCII, caracteres de
control invisibles en las posiciones 128 a 159, y 96 graficos fijos
desde la posicion 160 hasta la 255.
De estos, el mas importante es el ISO 8859-1 (Latin-1). Es admitido de
modo nativo por el controlador de consola de Linux, muy bien admitido
en X11R6 y es el conjunto de caracteres base de HTML.
El soporte de consola para los otros conjuntos de caracteres 8859 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/VGA
y emplean la tabla de tipos de letra de "correspondencia de usuario" en
el controlador de consola.
Aqui se presentan breves descripciones de cada conjunto:
8859-1 (Latin-1)
Latin-1 cubre la mayoria de lenguajes de Europa Occidental como
el albanes, catalan, danes, neerlandes, ingles, feroes, fines,
frances, aleman, gallego, gaelico, islandes, italiano, noruego,
portugues, espanol y sueco. La falta de las ligaduras
neerlandesa ij, francesa oe y las comillas antiguas ,,alemanas``
se considera tolerable.
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.
8859-3 (Latin-3)
Latin-3 es popular entre los autores de esperanto, gallego y
maltes. (El turco ahora se escribe con el conjunto 8859-9.)
8859-4 (Latin-4)
Latin-4 introdujo letras para el estonio, leton y lituano.
Esencialmente esta obsoleto; vea el 8859-10 (Latin-6) y 8859-13
(Latin 7).
8859-5 Letras cirilicas para el bulgaro, bielorruso, macedonio, ruso,
serbio y ucraniano. Los ucranianos leen la letra `ghe' con
palote como `heh' y necesitarian una `ghe' con plumada
ascendente para escribir una correcta `ghe'. Vea la discusion
sobre el KOI8-R mas abajo.
8859-6 Para el arabe. La tabla de glifos 8859-6 es un tipo fijo de
formas de letra separadas, pero un mecanismo de visualizacion
correcto deberia combinar estas usando las formas iniciales,
medias y finales apropiadas.
8859-7 Para el griego moderno.
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
8859-9 (Latin-5)
Esta es una variante del Latin-1 que reemplaza letras islandesas
con otras turcas.
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. RFC 1345 listaba un `latin6'
preliminar y diferente. El sami skolt aun necesita unos pocos
acentos mas que estos.
8859-11
Esto solo existe como borrador de un estandar que se rechazo. El
borrador era identico a TIS-620, que se usa en Linux para el
tailandes.
8859-12
Este conjunto no existe. Aunque se ha sugerido su uso para el
vietnamita, este no cabe en los 96 caracteres (independientes)
que ofrece el ISO 8859. En Linux se prefiere el conjunto de
caracteres UTF-8 para el vietnamita.
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.
8859-14 (Latin-8)
Este es el conjunto de caracteres celta, que cubre el gaelico y
el gales. Tambien contiene los caracteres punteados que necesita
el irlandes antiguo.
8859-15 (Latin-9)
Este anade el signo del Euro y las letras francesas y
finlandesas que se echaban de menos en Latin-1.
8859-16 (Latin-10)
Este conjunto abarca muchos de los idiomas que cubre el 8859-2 y
soporta el rumano de forma mas completa que aquel.
KOI8-R
El KOI8-R es un conjunto de caracteres no ISO popular en Rusia. La
primera mitad es el US ASCII; la segunda es un conjunto de caracteres
cirilico algo mejor disenado que el ISO 8859-5. KOI8-U es un conjunto
de caracteres comun, basado en KOI8-R, que tiene un mejor soporte para
el ucraniano. A diferencia de las series ISO-8859, ninguno de estos
conjuntos es compatible con el estandar ISO-2022.
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.
JIS X 0208
JIS X 0208 es un conjunto nacional estandar de caracteres japoneses.
Aunque hay algunos conjuntos nacionales estandares mas de caracteres
japoneses (como JIS X 0201, JIS X 0212 y JIS X 0213), este es el mas
importante. Los caracteres se proyectan en una matriz de 94x94 celdas
de 2 bytes, donde cada byte se encuentra en el rango 0x21-0x7e. Dese
cuenta que JIS X 0208 es un conjunto de caracteres, no una
codificacion. Esto significa que el propio JIS X 0208 no se usa para
expresar datos de texto. JIS X 0208 se usa como un componente para
construir codificaciones como EUC-JP, Shift_JIS y ISO-2022-JP. EUC-JP
es la codificacion mas importante para Linux e incluye ASCII IS y JIS X
0208. En EUC-JP, los caracteres JIS X 0208 se expresan con 2 dos bytes,
cada uno de los cuales es el codigo JIS X 0208 mas 0x80.
KS X 1001
KS X 1001 es un conjunto nacional estandar de caracteres coreanos. Al
igual que JIS X 0208, los caracteres se proyectan en una matriz de
94x94 celdas de 2 bytes. KS X 1001 se usa como JIS X 0208, como un
componente para construir codificaciones tales como EUC-KR, Johab e
ISO-2022-KR. EUC-KR es la codificacion mas importante para Linux e
incluye ASCII US y KS X 1001. KS C 5601 es el antiguo nombre de KS X
1001.
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 US y GB
2312. Dese cuenta que EUC-CN frecuentemente se identifica como GB, GB
2312 o CN-GB.
Big5
Big5 es un conjunto de caracteres popular en Taiwan para expresar chino
tradicional. (Big5 es tanto un conjunto de caracteres como una
codificacion.) Es un superconjunto del ASCII US. Los caracteres no
ASCII se expresan con dos bytes. Los bytes 0xa1-0xfe se usan como
primer byte en los caracteres de dos bytes. Big5 y sus extensiones se
usan ampliamente en Taiwan y Hong Kong. No cumple con el estandar
ISO-2022.
TIS 620
TIS 620 es un conjunto nacional estandar de caracteres tailandeses y un
superconjunto del ASCII US. Al igual que las series ISO 8859, los
caracteres tailandeses se proyectan en el rango 0xa1-0xfe. TIS 620 es
el unico conjunto de caracteres comunmente usado en Linux, ademas de
UTF-8, para tener caracteres de combinacion.
UNICODE
Unicode (ISO 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).
Hay informacion sobre Unicode en el URL <http://www.unicode.com>.
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 10646 de 31 bits, esta progresion continua hasta codigos de 6
bytes.)
Para la mayoria de la gente que usa los conjuntos de caracteres
ISO-8859, esto significa que los caracteres fuera de ASCII se codifican
ahora con dos bytes. Esto tiende a expandir los ficheros de texto
ordinarios en solo un 1 o 2%. Para el ruso y el griegos, esto expande
los ficheros de texto ordenarios en un 100%, ya que el texto en estos
idiomas se encuentra en su mayor parte fuera de ASCII. Para los
usuarios japoneses esto significa que los codigos de 16 bits de uso
comun actualmente necesitaran tres bytes. Aunque hay conversiones
algoritmicas desde algunos conjuntos de caracteres (esp. ISO-8859-1) a
Unicode, una conversion general requiere andar con tablas de conversion
que puede ser bastante grandes para los 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 o '/'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 maneja normalmente
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 basta para el japones, chino ni
coreano, pero es bastante para la mayoria de otros propositos.
Por el momento, el manejador de consola no maneja caracteres de
combinacion. Por lo que el tailandes, el siux y otros alfabetos que
necesitan caracteres de combinacion no pueden ser manejados en la
consola.
ISO 2022 Y ISO 4873
Los estandares ISO 2022 y 4873 describen un modelo de control de tipo
de letra basado en la VT100. Este modelo es (parcialmente) admitido por
el nucleo de Linux y por xterm(1). Es popular en Japon y Corea.
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 LSnR 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 el conjunto de caracteres
Gn 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 del Registro Internacional de Conjuntos de Caracteres
Codificados ISO 2375. Por ejemplo, ESC ( @ selecciona el conjunto de
caracteres ISO 646 como el G0, ESC ( A selecciona el conjunto de
caracteres estandar de R.U. (con la libra esterlina en lugar del signo
numeral #), ESC ( B selecciona el ASCII (con el dolar $ en lugar del
simbolo monetario x), ESC ( M selecciona un conjunto de caracteres para
lenguas africanas, ESC ( ! selecciona el conjunto de caracteres cubano,
etc. etc. etc.
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 4873 estipula un uso mas reducido de conjuntos de caracteres, donde
G0 esta fijo (siempre ASCII), de modo que G1, G2 y G3 solo pueden ser
llamados para codigos con el bit mas alto a 1. En particular, ^N y ^O
ya no se usan mas, ESC ( xx solo puede emplearse con xx=B y ESC ) xx,
ESC * xx, ESC + xx son equivalentes a ESC - xx, ESC . xx, ESC / xx,
respectivamente.
V'EASE TAMBI'EN
console(4), console_ioctl(4), console_codes(4), ascii(7),
iso_8859_1(7), unicode(7), utf-8(7)