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 de dispositivos (incluyendo el de la consola) admiten
conjuntos de caracteres multilingues incluyendo letras del alfabeto
latino con marcas diacriticas, acentos, 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 en discusion incluyen el
ASCII, ISO 8859, KOI8-R, Unicode, ISO 2022 e ISO 4873.
ASCII
ASCII (American Standard Code For Information, Codigo Estandar
Americano para la Informacion) es el conjunto de caracteres original de
7 bits, disenado inicialmente para el ingles americano. Actualmente se
describe en el estandar ECMA-6.
En Gran Bretana se emplea una variante donde se reemplaza el simbolo
del sostenido o almohadilla o libra peso o numero (#) por la libra
esterlina britanica; cuando sea preciso, las variantes americanas y
britanicas pueden distinguirse por los nombres "US ASCII" y "UK ASCII".
Como Linux fue escrito para equipos disenados en los EE.UU., admite US
ASCII de modo nativo.
ISO 8859
ISO 8859 es una serie de 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``
es tolerable.
8859-2 (Latin-2)
Latin-2 admite 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,
maltes y turco.
8859-4 (Latin-4)
Latin-4 introdujo letras para el estonio, leton y lituano.
Esencialmente esta obsoleto; vea el 8859-10 (Latin-6).
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 Admite el griego moderno.
8859-8 Admite el hebreo.
8859-9 (Latin-5)
Esta es una variante del Latin-1 que reemplaza letras islandesas
no muy usadas 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.
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.
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.
UNICODE
Unicode (ISO 10646) es un estandar cuyo objetivo es representar
inequivocamente cada glifo conocido en cada lenguaje humano. La
codificacion nativa de Unicode es de 32 bits (versiones mas antiguas
empleaban 16). Hay informacion sobre Unicode en el URL
<http://www.unicode.com>.
Linux representa Unicode empleando el Formato de Transferencia 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 los usuarios de ISO-8859-1, esto significa que los caracteres con
el ultimo bit a 1 se codifican ahora con dos bytes. Esto tiende a
expandir los ficheros de texto ordinarios en un 1 o 2%. Sin embargo no
hay problemas de conversion, puesto que los valores Unicode de los
simbolos de ISO-8859-1 igualan a los correspondientes de los de
ISO-8859-1 (extendidos en 8 bits iniciales a 0). Para los usuarios
japoneses esto significa que los codigos de 16 bits de uso comun
actualmente, necesitaran tres bytes y se requeriran tablas de
correspondencia. Por eso muchos japoneses prefieren el ISO 2022.
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.
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)