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

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)