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)