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

NOMBRE

       UTF-8 - una codificación Unicode mutibyte compatible con ASCII

DESCRIPCIÓN

       El conjunto de caracteres Unicode 3.0 ocupa un espacio de códigos de 16 bits. La codificación Unicode más
       obvia  (conocida  como  UCS-2)  consiste  en  una  secuencia de palabras de 16 bits. Tales cadenas pueden
       contener, como parte de muchos caracteres de 16 bits, bytes como '\0' or '/', que tienen  un  significado
       especial  en nombres de ficheros y en otras variables de funciones de la biblioteca C. Además, la mayoría
       de las herramientas de UNIX esperan ficheros ASCII y no pueden leer palabras de 16 bits  como  caracteres
       sin  considerables  modificaciones.  Por estas razones, UCS-2 no es una codificación externa apropiada de
       Unicode en nombres de ficheros, variables de entorno, etc. El ISO 10646 Universal Character Set (UCS), es
       un superconjunto de Unicode con un espacio de códigos de hasta 31 bits y la codificación obvia para dicho
       conjunto, UCS-4 (una secuencia de palabras de 32 bits), posee los mismos problemas.

       La codificación UTF-8 de Unicode y UCS carece de estos problemas y  es  la  forma  habitual  de  usar  el
       conjunto de caracteres Unicode bajo sistemas operativos al estilo UNIX.

PROPIEDADES

       La codificación UTF-8 tiene los siguientes propiedades atractivas:

       * Los  caracteres  UCS  0x00000000  a 0x0000007f (el conjunto clásico de caracteres US-ASCII se codifican
         simplemente como los bytes 0x00 a  0x7f (compatibilidad con ASCII) Esto significa que  los  ficheros  y
         cadenas  que  contengan solamente caracteres ASCII de 7 bits tienen la misma codificación en ASCII y en
         UTF-8.

       * Todos los caracteres UCS
          > 0x7f se codifican como una secuencia multibyte formada solamente por bytes en el rango 0x80 a  0xfd,
         por  tanto  ningún  byte  ASCII  puede aparecer como parte de otro carácter y no hay problemas con, por
         ejemplo,  '\0' or '/'.

       * Se preserva la enumeración lexicográfica de las cadenas UCS-4

       * Los  2^31 códigos posibles UCS pueden codificarse con UTF-8.

       * Los bytes 0xfe y 0xff no se usan nunca en la codificación UTF-8

       * El primer byte de una secuencia multibyte que represente un carácter no ASCII UCS siempre se  halla  en
         el  rango   0xc0 a 0xfd, e indica la longitud de la secuencia. El resto de los bytes de la secuencia se
         hallan en el rango 0x80 a 0xbf. Esto permite una fácil resincronización y resulta en  una  codificación
         sin estado y robusta frente a la pérdida de bytes.

       * Los caracteres UCS codificados en UTF-8 pueden llegar a ser de 6 bytes, no obstante el estándar Unicode
         no especifica caracteres por encima de 0x10ffff, por lo tanto los caracteres Unicode sólo pueden ser de
         4 bytes como mucho en UTF-8.

CODIFICACIÓN

       Las  siguientes secuencias de bytes se usan para representar un carácter. La secuencia a usar depende del
       código UCS correspondiente al carácter:

       0x00000000 - 0x0000007F:
           0xxxxxxx

       0x00000080 - 0x000007FF:
           110xxxxx 10xxxxxx

       0x00000800 - 0x0000FFFF:
           1110xxxx 10xxxxxx 10xxxxxx

       0x00010000 - 0x001FFFFF:
           11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

       0x00200000 - 0x03FFFFFF:
           111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

       0x04000000 - 0x7FFFFFFF:
           1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

       Las posiciones xxx se rellenan con los bits del número de código del  carcter  representado  en  binario.
       Sólo se puede usar la secuencia más corta que pueda representar el número de código.

       Los  códigos  UCS  0xd800–0xdfff  (sustitutos  de UTF-16) así como 0xfffe y 0xffff (caracteres no UCS) no
       deberían aparecer en flujos conformes con UTF-8 .

EJEMPLOS

       El carácter Unicode 0xa9 = 1010 1001 (el signo de copyright) se codifica en UTF-8 como

              11000010 10101001 = 0xc2 0xa9

       y el carácter 0x2260 = 0010 0010 0110 0000 (el símbolo de "distinto que") se codifica como:

              11100010 10001001 10100000 = 0xe2 0x89 0xa0

OBSERVACIONES SOBRE APLICACIONES

       Los usuarios tiene que seleccionar una localización UTF-8 , por ejemplo con

              export LANG=en_GB.UTF-8

       para poder activar el soporte de UTF-8 en las aplicaciones.

       Aquellas aplicaciones que deban ser conscientes de la codificación de caracteres usada  deben  establecer
       siempre la localización mediante por ejemplo

              setlocale(LC_CTYPE, "")

       y los programadores pueden comprobar la expresión

              strcmp(nl_langinfo(CODESET), "UTF-8") == 0

       para averiguar si se ha seleccionado una localización UTF-8 y por tanto toda la entrada y salida en texto
       plano,  la  comunicación  con  la  terminal,  el  contenido de un fichero con texto plano, los nombres de
       fichero y las variables de entorno están codificadas en UTF-8.

       Los programadores acostumbrados a codificaciones de un sólo byte tales como US-ASCII o ISO 8859 deben ser
       conscientes de que dos suposiciones hechas hasta ahora ya no son válidas con  localizaciones  UTF-8.   En
       primer  lugar, un byte ya no se corresponde necesariamente con un sólo carácter. En segundo lugar, puesto
       que los modernos emuladores de terminal en modo UTF-8 soportan también caracteres  de  doble-anchura  del
       chino,  japonés  y  coreano,  así  como  caracteres combinantes de no espaciado, escribir en la salida un
       carácter individual no implica necesariamente avanzar el cursor una posición como sucedía en  ASCII.   En
       la  actualidad  se  deben  usar  funciones  de  biblioteca  como  mbsrtowcs(3)  y wcswidth(3) para contar
       caracteres y posiciones del cursor.

       La secuencia de escape oficial para cambiar de un esquema de  codificación  ISO  2022  (como  el  que  se
       utiliza  por ejemplo en las terminales VT100) a UTF-8 es ESC % G ("\x1b%G"). La correspondiente secuencia
       de retorno de UTF-8 a ISO 2022 es ESC % @ ("\x1b%@"). Otras secuencias ISO 2022  (como para  cambiar  los
       conjuntos G0 y G1) no son aplicables en el modo UTF-8.

       Se  espera  que  en un futuro previsible, UTF-8 reemplace a ASCII y ISO 8859 en todos los niveles como la
       codificación de caracteres común  en  sistemas  POSIX,  llevando  a  un  entorno  significativamente  más
       enriquecido para manejar texto plano.

SEGURIDAD

       Los  estándares  Unicode  y  UCS  requieren que los fabricantes de UTF-8 usen la forma más corta posible,
       p.ej., producir una secuencia de dos bytes que tenga como primer byte 0xc0 no se ajustaría  al  estándar.
       Unicode  3.1  añade el requisito de que los programas conformes no deben aceptar en su entrada formas que
       no cumplan la condición anterior. Ésto es por motivos  de  seguridad:  si  un  programa  desea  comprobar
       posibles  violaciones  de seguridad en la entrada del usuario, éste podría verificar solamente la versión
       ASCII de "/../" o ";" o NUL y pasar por  alto  las  diferentes  maneras  no-ASCII  de  representar  estas
       situaciones en una codificación UTF-8 con formato no reducido.

ESTÁNDARES

       ISO/IEC 10646-1:2000, Unicode 3.1, RFC 2279, Plan 9.

AUTOR

       Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>

VÉASE TAMBIÉN

       nl_langinfo(3), setlocale(3), charsets(7), unicode(7)

GNU                                               11 mayo 2001                                          UTF-8(7)