Provided by: manpages-es_1.55-10_all bug

NOMBRE

       charsets - internacionalización y conjuntos de caracteres desde el punto de vista del programador

DESCRIPCIÓN

       Linux  es  un  sistema operativo internacional. Varias de sus utilidades y controladores (``drivers'') de
       dispositivos (incluyendo el de la consola) admiten conjuntos de  caracteres  multilingües,  que  incluyen
       letras  del  alfabeto  latino con marcas diacríticas, acentos y ligaduras, y alfabetos enteros no latinos
       incluyendo el griego, cirílico, árabe y hebreo.

       Esta página de manual presenta una visión de los estándares de conjuntos de caracteres desde el punto  de
       vista  del  programador  y  cómo  encajan todos juntos en Linux. Los estándares que se tratan incluyen el
       ASCII, ISO 8859, KOI8-R, Unicode, ISO 2022 e ISO 4873. Vamos a hacer enfásis  en  aquellos  conjuntos  de
       caracteres  que  se  usan  realmente  como  conjuntos  de  caracteres de localización, 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 localización  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 ningún orden particular.) (El rumano se  puede  cambiar  al
       ISO-8859-16.)

ASCII

       ASCII  (American Standard Code For Information Interchange, Código Estándar Americano para el Intercambio
       de Información) es el conjunto de caracteres original de 7 bits, diseñado  inicialmente  para  el  inglés
       americano.  Actualmente se describe en el estándar ECMA-6.

       Existen  varias  variantes  del  ASCII  de  7  bits  que reemplazan el signo del dolar por otros símbolos
       monetarios y caracteres de puntuación con caracteres alfabéticos  no  ingleses  para  cubrir  el  alemán,
       frances, español y otros. No se recomienda usar ningún de ellos; la libc de GNU no soporta localizaciones
       cuyos  conjuntos  de  caracteres no sean verdaderos superconjuntos del ASCII. (Estos conjuntos también se
       conocen como ISO-646, un pariente cercano del ASCII que permite reemplazar estos caracteres.)

       Como Linux fue escrito para equipos diseñados 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  gráficos  fijos
       desde la posición 160 hasta la 255.

       De  éstos, el más 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 está disponible en Linux  a  través  de
       utilidades  de  usuario (como setfont(8)) que modifican las asociaciones de teclas y la tabla de gráficos
       EGA/VGA y emplean la tabla de tipos de letra  de  "correspondencia  de  usuario"  en  el  controlador  de
       consola.

       Aquí se presentan breves descripciones de cada conjunto:

       8859-1 (Latin-1)
              Latin-1  cubre  la  mayoría  de  lenguajes  de  Europa Occidental como el albanés, catalán, danés,
              neerlandés, inglés, feroés, finés, francés, alemán, gallego, gaélico, islandés, italiano, noruego,
              portugués, español 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 mayoría de las lenguas eslavas y de Centro-Europa que se escriben
              con caracteres latinos: checo, alemán, húngaro, polaco, rumano, croata, eslovaco y esloveno.

       8859-3 (Latin-3)
              Latin-3 es popular entre los autores de esperanto, gallego y maltés.  (El turco ahora  se  escribe
              con el conjunto 8859-9.)

       8859-4 (Latin-4)
              Latin-4  introdujo  letras  para  el estonio, letón y lituano. Esencialmente está obsoleto; vea el
              8859-10 (Latin-6) y 8859-13 (Latin 7).

       8859-5 Letras cirílicas para el búlgaro, bielorruso, macedonio, ruso, serbio y ucraniano. Los  ucranianos
              leen  la  letra  `ghe'  con palote como `heh' y necesitarían una `ghe' con plumada ascendente para
              escribir una correcta `ghe'. Vea la discusión sobre el KOI8-R más abajo.

       8859-6 Para el árabe. La tabla de glifos 8859-6 es un tipo fijo de formas de  letra  separadas,  pero  un
              mecanismo  de  visualización correcto debería combinar éstas usando las formas iniciales, medias y
              finales apropiadas.

       8859-7 Para el griego moderno.

       8859-8 Para el hebreo moderno sin ``niqud'' (signos de puntuación).  Los ``niqud'' y  el  hebreo  bíblico
              ``oficial'' se encuentran fuera del ámbito de este conjunto de caracteres; en Linux se prefiere la
              codificación UTF-8 para esto

       8859-9 (Latin-5)
              Ésta es una variante del Latin-1 que reemplaza letras islandesas con otras turcas.

       8859-10 (Latin-6)
              El  Latin  6  añade  las últimas letras del inuit (esquimal de Groenlandia) y del sami (lapón) que
              faltaban en el Latin 4 para cubrir toda el área nórdica. RFC 1345 listaba un `latin6' preliminar y
              diferente. El sami skolt aún necesita unos pocos acentos más que éstos.

       8859-11
              Esto sólo existe como borrador de un estándar que se rechazó. El borrador era idéntico a  TIS-620,
              que se usa en Linux para el tailandés.

       8859-12
              Este  conjunto  no existe. Aunque se ha sugerido su uso para el vietnamita, éste 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 Báltico; en particular, incluye los caracteres letones que no se
              encuentran en Latin-4.

       8859-14 (Latin-8)
              Éste es el conjunto de caracteres celta, que cubre el gaélico y el  galés.  También  contiene  los
              caracteres punteados que necesita el irlandés antiguo.

       8859-15 (Latin-9)
              Éste  añade  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  más
              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 cirílico algo mejor  diseñado  que  el  ISO  8859-5.  KOI8-U  es  un
       conjunto  de  caracteres  común,  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 estándar ISO-2022.

       El soporte de consola para el KOI8-R está disponible en Linux a través de  utilidades  de  usuario  (como
       setfont(8))  que  modifican  las  asociaciones de teclas y la tabla de gráficos 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 estándar  de  caracteres  japoneses.   Aunque  hay  algunos  conjuntos
       nacionales  estándares más de caracteres japoneses (como JIS X 0201, JIS X 0212 y JIS X 0213), éste es el
       más 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
       codificación. 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 codificación más 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 código JIS X 0208 más 0x80.

KS X 1001

       KS  X  1001  es  un  conjunto  nacional  estándar  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
       codificación más 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 estándar 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 codificación EUC-CN. EUC-CN es la codificación más 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 codificación.) 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 estándar ISO-2022.

TIS 620

       TIS  620  es  un conjunto nacional estándar 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  único  conjunto  de  caracteres  comunmente usado en Linux, además de UTF-8, para tener caracteres de
       combinación.

UNICODE

       Unicode (ISO 10646) es un estándar cuyo objetivo es representar inequívocamente cada carácter conocido en
       cada lenguaje humano.  La estructura de Unicode admite  20'1  bits  para  codificar  cada  caracter.  Sin
       embargo,  ya  que la mayoría 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 sólo cuando se codifican ciertos caracteres poco  comunes),  o  bien  una
       serie de bytes de 8 bits (UTF-8). Hay información sobre Unicode en el URL <http://www.unicode.com>.

       Linux  representa  Unicode empleando el Formato de Transformación Unicode de 8 bits (UTF-8). UTF-8 es una
       codificación 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 ó un bit arbitrario. Un byte 0xxxxxxx representa el carácter Unicode 00000000
       0xxxxxxx que codifica el mismo símbolo que el ASCII 0xxxxxxx.  Así, ASCII va sin cambio alguno dentro  de
       UTF-8, y la gente que emplea ASCII no nota ningún cambio: ni en el código ni en tamaños de fichero.

       Un  byte  110xxxxx  es  el  comienzo de un código de 2 bytes, y 110xxxxx 10yyyyyy se ensambla en 00000xxx
       xxyyyyyy.  Un byte 1110xxxx es el comienzo de un código 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
       progresión continúa hasta códigos de 6 bytes.)

       Para la mayoría 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 sólo 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 códigos de 16 bits de uso común actualmente necesitarán tres
       bytes. Aunque hay conversiones algorítmicas desde algunos conjuntos de  caracteres  (esp.  ISO-8859-1)  a
       Unicode,  una  conversión  general requiere andar con tablas de conversión que puede ser bastante grandes
       para los códigos de 16 bits.

       Observe que UTF-8 es auto-sincronizante: 10xxxxxx es una cola, y cualquier otro byte es la cabeza  de  un
       código.  Observe  que  de  la  única  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 algún código más grande.

       Puesto que ASCII, y, en particular, NUL y '/', permanecen inalterados, el núcleo no se entera de  que  se
       está empleando UTF-8. No le importa en absoluto para qué son los bytes que está manejando.

       La  representación  de  los flujos de datos Unicode se maneja normalmente a través de tablas de `subtipo'
       que hacen corresponder un subconjunto de Unicode a glifos. Internamente el  núcleo  emplea  Unicode  para
       describir  el  subtipo  de  letra  cargada en RAM de vídeo. Esto significa que en el modo UTF-8 uno puede
       emplear un conjunto de caracteres con 512 símbolos diferentes. Esto no basta para el  japonés,  chino  ni
       coreano, pero es bastante para la mayoría de otros propósitos.

       Por  el momento, el manejador de consola no maneja caracteres de combinación. Por lo que el tailandés, el
       siux y otros alfabetos que necesitan caracteres de combinación no pueden ser manejados en la consola.

ISO 2022 Y ISO 4873

       Los estándares ISO 2022 y 4873 describen un modelo de control de tipo de letra basado en la  VT100.  Este
       modelo es (parcialmente) admitido por el núcleo de Linux y por xterm(1).  Es popular en Japón y Corea.

       Hay  4  conjuntos  de  caracteres  gráficos,  llamados  G0, G1, G2 y G3, y uno de ellos es el conjunto de
       caracteres actual para los códigos con el bit más alto a 0 (inicialmente  G0),  y  uno  de  ellos  es  el
       conjunto  de  caracteres actual para los códigos con el bit más alto a 1 (inicialmente G1). Cada conjunto
       de caracteres gráfico tiene 94 ó 96 caracteres, y es esencialmente un conjunto de caracteres de  7  bits.
       Emplea  códigos  bien  entre 040-0177 (041-0176) o bien entre 0240-0377 (0241-0376).  G0 siempre tiene de
       tamaño 94  y emplea códigos 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 función LSn hace que el conjunto de caracteres Gn sea el actual para los códigos con  el  bit
       más  alto  a 0.  La función LSnR hace que el conjunto de caracteres Gn sea el actual para los códigos con
       el bit más alto a 1.  La función SSn hace que el conjunto de caracteres Gn (n=2 ó 3) sea el  actual  para
       el siguiente carácter solamente (tenga lo que tenga su bit más 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 símbolo o un
       par de símbolos 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  estándar de R.U. (con la libra esterlina en lugar del signo numeral #), ESC ( B selecciona el
       ASCII (con el dólar $ en lugar del símbolo monetario ¤), 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
       japonés seleccionado por ESC $ B tiene una versión más reciente seleccionada por ESC & @ ESC $ B.

       ISO 4873 estipula un uso más reducido de conjuntos de caracteres, donde G0 está fijo (siempre ASCII),  de
       modo  que G1, G2 y G3 sólo pueden ser llamados para códigos con el bit más alto a 1.  En particular, ^N y
       ^O ya no se usan más, ESC ( xx sólo puede emplearse con xx=B y  ESC  )  xx,  ESC  *  xx,  ESC  +  xx  son
       equivalentes a ESC - xx, ESC . xx, ESC / xx, respectivamente.

VÉASE TAMBIÉN

       console(4), console_ioctl(4), console_codes(4), ascii(7), iso_8859_1(7), unicode(7), utf-8(7)

Linux                                              7 mayo 2001                                       CHARSETS(7)