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)