UTF-8(7) Miscellaneous Information Manual UTF-8(7) NOME UTF-8 - uma codificacao Unicode multibyte compativel com ASCII DESCRICAO O conjunto de caracteres Unicode 3.0 ocupa um espaco de codigo de 16 bits. A codificacao Unicode mais obvia (conhecida como UCS-2) consiste de uma sequencia de palavras de 16 bits. Tais palavras podem conter, como parte de seus varios caracteres de 16 bits, bytes como '\0' ou '/', que tem um significado especial em nomes de arquivos e outros parametros de funcoes em bibliotecas C. Alem disso, a maioria das ferramentas UNIX esperam arquivos ASCII e nao podem ler palavras de 16 bits como caracteres sem modificacoes maiores. Por essas razoes, UCS-2 nao e uma codificacao externa adequada de Unicode em nomes de arquivos, arquivos-texto, variaveis de ambiente, etc. O Universal Character Set (UCS), um superconjunto de Unicode da ISO/IEC 10646, ocupa um espaco de codigo ainda maior -- 31 bits -- e a obvia codificacao UCS-4 para ele (uma sequencia de palavras de 32 bits) tem o mesmo problema. A codificacao UTF-8 de Unicode e UCS nao tem esses problemas e e a maneira mais comum de usar o conjunto de caracteres Unicode sob sistemas operacionais do estilo Unix. Propriedades A codificacao UTF-8 tem as seguintes belas propriedades: o Caracteres UCS de 0x00000000 a 0x0000007f (os classicos caracteres US-ASCII) sao codificadas simplesmente como bytes de 0x00 a 0x7f (compatibilidade com ASCII). Isto significa que os arquivos e strings que contem somente caracteres ASCII de 7 bits tem a mesma codificacao tanto sob ASCII quanto sob UTF-8. o Todos os caracteres UCS maiores que 0x7f sao codificados como uma sequencia multibyte, consistindo somente de bytes na faixa de 0x80 a 0xfd, de forma que nenhum byte ASCII apareca como parte de outro caractere e nao haja problemas com, por exemplo, '\0' ou '/'. o A ordenacao lexicografica das strings UCS-4 e preservada. o Todos os 2^31 codigos UCS possiveis podem ser codificados usando-se UTF-8. o Os bytes 0xc0, 0xc1, 0xfe e 0xff nunca sao usados na codificacao UTF-8. o O primeiro byte de uma sequencia multibyte que representa um unico caractere UCS nao-ASCII esta sempre na faixa 0xc2 a 0xfd, e indica o tamanho desta sequencia multibyte. Todos os bytes seguintes na sequencia multibyte estao na faixa de 0x80 a 0xbf. Isto permite uma ressincronizacao facil e torna a codificacao independente de estado, e robusta contra perda de bytes. o UTF-8 codificados em UCS podem ter ate seis bytes de comprimento, porem os caracteres Unicode padrao especifica nenhum caractere acima de 0x10ffff, assim caracteres Unicode somente podem ter mais de quatro bytes de comprimento em UTF-8. Codificacao As seguintes sequencias de bytes sao usadas para representar um caractere. A sequencia a ser usada depende do numero de codigo 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 posicoes de bit xxx sao preenchidas com os bits do numero do codigo de caractere na representacao binaria, com o primeiro bit mais significante primeiro (big-endian). Somente a sequencia multibyte mais curta possivel que pode representar o numero do codigo do caractere pode ser usada. Os valores de codigo UCS 0xd800-0xdfff (substitutos UTF-16) assim como 0xfffe e 0xffff (nao-caracteres UCS) nao deveriam aparecer em conformidade com o fluxo UTF-8. De acordo com o RFC 3629, nenhum ponto acima de U+10FFFF deve ser usado, o que limita os caracteres a quatro bytes. Exemplo O caractere Unicode 0xa9 = 1010 1001 (o sinal de copyright) e codificado em UTF-8 como 11000010 10101001 = 0xc2 0xa9 e o caractere 0x2260 = 0010 0010 0110 0000 (o simbolo de "diferente") e codificado como: 11100010 10001001 10100000 = 0xe2 0x89 0xa0 Notas para aplicacao Usuarios tem que selecionar uma localidade UTF-8, por exemplo, com export LANG=en_GB.UTF-8 para ordenar a ativacao do suporte UTF-8 nas aplicacoes. Aplicacoes que tem sido usuarias prevenidas de codificacao de caractere sempre deveriam selecionar a localizacao com, por exemplo, setlocale(LC_CTYPE, "") e programadores podem, entao, testar a expressao strcmp(nl_langinfo(CODESET), "UTF-8") == 0 para determinar se uma localidade UTF-8 ja foi selecionado e se todo texto plano da entrada e saida padrao, comunicacao de terminal, conteudo de texto plano, nomes de arquivos e variaveis de ambiente sao codificadas em UTF-8. Programadores acostumados com codificacoes de byte unico como US-ASCII e ISO/IEC 8859 tem de estar cientes que duas suposicoes nao sao mais validas na localizacao UTF-8. Primeiramente, um byte simples nao corresponde necessariamente a um caractere unico. Em segundo lugar, desde os emuladores de terminal modernos em UTF-8 tambem podem prover suporte a caracteres de tamanho duplo de chines, japones e coreano, bem como caracteres de combinacao sem espacamento, emitindo um caractere unico nao necessariamente avancando o cursor por uma posicao como e feito em ASCII. Bibliotecas de funcoes como mbsrtowcs(3) e wcswidth(3) devem ser usadas nos dias atuais para contar caracteres e posicoes de cursor. A sequencia oficial de ESC para alternar, oriunda do esquema de codificacao ISO/IEC 2022 (como usada, por exemplo, por terminais VT100) para UTF-8 e ESC % G ("\x1b%G"). O sequencia de retorno correspondente da UTF-8 para ISO/IEC 2022 e ESC % @ ("\x1b%@"). Outras sequencias ISO/IEC 2022 (tais como para trocar os conjuntos G0 e G1) nao sao aplicadas no modo UTF-8. Seguranca Os padroes Unicode e UCS requerem que produtores de UTF-8 usem a menor forma possivel, isto e, produzindo uma sequencia de dois bytes sendo o primeiro 0xc0. Unicode 3.1 foi adicionada um requisicao que programas nao devem aceitar formas nao-reduzidas em suas entradas. Por razoes de seguranca: se a entrada do usuario for verificada, contra violacoes de seguranca, um programa poderia verificar somente pelas versoes ASCII de "/../" ou ";" ou NUL e negar que ha muitas maneiras non-ASCII de representar isto nas formas nao-reduzidas UTF-8. Padroes ISO/IEC 10646-1:2000, Unicode 3.1, RFC 3629, Plan 9. VEJA TAMBEM locale(1), nl_langinfo(3), setlocale(3), charsets(7), unicode(7) TRADUCAO A traducao para portugues brasileiro desta pagina man foi criada por Rubens de Jesus Nogueira , Andre Luiz Fassone e Rafael Fontenelle . Esta traducao e uma documentacao livre; leia a Licenca Publica Geral GNU Versao 3 ou posterior para as condicoes de direitos autorais. Nenhuma responsabilidade e aceita. Se voce encontrar algum erro na traducao desta pagina de manual, envie um e-mail para a lista de discussao de tradutores . Linux man-pages 6.9.1 15 junho 2024 UTF-8(7)