utf-8

UTF-8(7)                   Manual do Programador Linux                  UTF-8(7)



NOME
       UTF-8 - uma codificação Unicode multibyte compatível com ASCII

DESCRIÇÃO
       O conjunto de caracteres Unicode ocupa um espaço de código de 16 bits. A
       codificação Unicode mais óbvia (conhecida como UCS-2) consiste de uma
       seqüência de palavras de 16 bits. Tais strings podem conter, em sua maior
       parte, bytes de caracteres de 16 bits, como '\0' ou '/', que têm um
       significado especial em nomes de arquivos e outros parâmetros de funções
       em bibliotecas C.  Além disso, a maioria das ferramentas UNIX esperam
       arquivos ASCII e não podem ler palavras de 16 bits como caracteres sem
       modificações maiores. Por essas razões, UCS-2 não é uma codificação
       externa disponível de Unicode em nomes de arquivos, arquivos-texto,
       variáveis de ambiente, etc. O ISO 10646 Universal Character Set (UCS), um
       superconjunto de Unicode, ocupa ainda um espaço de código de 31 bits e a
       óbvia codificação UCS-4 para ele (uma seqüência de palavras de 32 bits)
       tem o mesmo problema.

       A codificação UTF-8 de Unicode e UCS não tem esses problemas e é a
       maneira de usar o conjunto de caracteres Unicode sob sistemas
       operacionais do estilo Unix.

PROPIEDADES
       A codificação UTF-8 tem as seguintes belas propriedades:

       * caracteres UCS de 0x00000000 a 0x0000007f (os clássicos caracteres US-
         ASCII) são codificadas simplesmente como bytes de 0x00 a 0x7f
         (compatibilidade com ASCII). Isto significa que os arquivos e strings
         que contêm somente caracteres ASCII de 7 bits têm a mesma codificação
         tanto sob ASCII quanto sob UTF-8.

       * Todos os caracteres UCS > 0x7f são codificados como uma seqüência
         multibyte, consistindo somente de bytes na faixa de 0x80 a 0xfd, de
         forma que nenhum byte ASCII apareça como parte de outro caractere e não
         haja problemas com, por exemplo, '\0' ou '/'.

       * A ordenação lexicográfica das strings UCS-4 é preservada.

       * Todos os 2^31 códigos UCS possíveis podem ser codificados usando-se
         UTF-8.

       * Os bytes 0xfe e 0xff nunca são usados na codificação UTF-8

       * O primeiro byte de uma seqüência multibyte que representa um único
         caractere UCS não-ASCII está sempre na faixa 0xc0 a 0xfd, e indica o
         tamanho desta seqüência multibyte. Todos os bytes seguintes na
         seqüência multibyte estão na faixa de 0x80 a 0xbf. Isto permite um
         ressincronismo fácil e torna a codificação independente de estado, e
         robusta contra perda de bytes.

       * Caracteres
         UTF-8 codificados em UCS podem ter até seis bytes de comprimento, porém
         os caracteres Unicode só podem ter até três bytes de comprimento. Como
         o Linux usa somente o subconjunto Unicode de 16 bits do UCS, sob Linux,
         as seqüências multibytes UTF-8 só podem ter um, dois ou três bytes de
         comprimento.

CODIFICAÇÃO
       As seguintes seqüências de bytes são usadas para representar um
       caractere. A seqüência a ser usada depende do número de código UCS do
       caractere:

       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

       As posições de bit xxx são preenchidas com os bits do número do código de
       caractere na representação binária. Somente a seqüência de multibyte mais
       curta possível que pode representar o número do código do caractere pode
       ser usada.

EXEMPLOS
       O caractere Unicode 0xa9 = 1010 1001 (o sinal de copyright) é codificado
       em UTF-8 como

              11000010 10101001 = 0xc2 0xa9

       e o caractere 0x2260 = 0010 0010 0110 0000 (o símbolo de "diferente") é
       codificado como:

              11100010 10001001 10100000 = 0xe2 0x89 0xa0

PADRÕES
       ISO 10646, Unicode 1.1, XPG4, Plan 9.

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

VEJA TAMBÉM
       unicode(7)

TRADUZIDO POR LDP-BR em 21/08/2000.
       Rubens de Jesus Nogueira <darkseid99@usa.net> (tradução) André L. Fassone
       Canova <lonelywolf@blv.com.br> (revisão)



Linux                              26/11/1995                           UTF-8(7)