Provided by: manpages-es_1.55-9_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)