.\" -*- nroff -*- .\" .\" Copyright (C) Markus Kuhn, 1996 .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as .\" published by the Free Software Foundation; either version 2 of .\" the License, or (at your option) any later version. .\" .\" The GNU General Public License's references to "object code" .\" and "executables" are to be interpreted as the output of any .\" document formatting or typesetting system, including .\" intermediate and printed output. .\" .\" This manual is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. .\" .\" 1995-11-26 Markus Kuhn .\" First version written .\" .TH UTF-8 7 "26/11/1995" "Linux" "Manual do Programador Linux" .SH NOME UTF-8 \- uma codificação Unicode multibyte compatível com ASCII .SH DESCRIÇÃO O conjunto de caracteres .B Unicode ocupa um espaço de código de 16 bits. A codificação Unicode mais óbvia (conhecida como .BR 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, .B UCS-2 não é uma codificação externa disponível de .B Unicode em nomes de arquivos, arquivos-texto, variáveis de ambiente, etc. O .BR "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 .B UCS-4 para ele (uma seqüência de palavras de 32 bits) tem o mesmo problema. A codificação .B UTF-8 de .B Unicode e .B UCS não tem esses problemas e é a maneira de usar o conjunto de caracteres .B Unicode sob sistemas operacionais do estilo Unix. .SH PROPIEDADES A codificação .B UTF-8 tem as seguintes belas propriedades: .TP 0.2i * caracteres .B UCS de 0x00000000 a 0x0000007f (os clássicos caracteres \fBUS-ASCII\fP) 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 .B ASCII quanto sob .BR UTF-8 . .TP * Todos os caracteres .B 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 '/'. .TP * A ordenação lexicográfica das strings .B UCS-4 é preservada. .TP * Todos os 2^31 códigos UCS possíveis podem ser codificados usando-se .BR UTF-8 . .TP * Os bytes 0xfe e 0xff nunca são usados na codificação .B UTF-8 . .TP * O primeiro byte de uma seqüência multibyte que representa um único caractere .B 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. .TP * Caracteres .B UTF-8 codificados em .B UCS podem ter até seis bytes de comprimento, porém os caracteres .B Unicode só podem ter até três bytes de comprimento. Como o Linux usa somente o subconjunto .B Unicode de 16 bits do .BR UCS , sob Linux, as seqüências multibytes .B UTF-8 só podem ter um, dois ou três bytes de comprimento. .SH 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: .TP 0.4i 0x00000000 - 0x0000007F: .RI 0 xxxxxxx .TP 0x00000080 - 0x000007FF: .RI 110 xxxxx .RI 10 xxxxxx .TP 0x00000800 - 0x0000FFFF: .RI 1110 xxxx .RI 10 xxxxxx .RI 10 xxxxxx .TP 0x00010000 - 0x001FFFFF: .RI 11110 xxx .RI 10 xxxxxx .RI 10 xxxxxx .RI 10 xxxxxx .TP 0x00200000 - 0x03FFFFFF: .RI 111110 xx .RI 10 xxxxxx .RI 10 xxxxxx .RI 10 xxxxxx .RI 10 xxxxxx .TP 0x04000000 - 0x7FFFFFFF: .RI 1111110 x .RI 10 xxxxxx .RI 10 xxxxxx .RI 10 xxxxxx .RI 10 xxxxxx .RI 10 xxxxxx .PP As posições de bit .I 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. .SH EXEMPLOS O caractere .B Unicode 0xa9 = 1010 1001 (o sinal de copyright) é codificado em UTF-8 como .PP .RS 11000010 10101001 = 0xc2 0xa9 .RE .PP e o caractere 0x2260 = 0010 0010 0110 0000 (o símbolo de "diferente") é codificado como: .PP .RS 11100010 10001001 10100000 = 0xe2 0x89 0xa0 .RE .SH PADRÕES ISO 10646, Unicode 1.1, XPG4, Plan 9. .SH AUTOR Markus Kuhn .SH "VEJA TAMBÉM" .B unicode(7) .SH TRADUZIDO POR LDP-BR em 21/08/2000. \&\fR\&\f(CWRubens de Jesus Nogueira (tradução)\fR \&\fR\&\f(CWAndré L. Fassone Canova (revisão)\fR