| UTF-8(7) | Miscellaneous Information Manual | UTF-8(7) |
UTF-8 - uma codificação Unicode multibyte compatível com ASCII
O conjunto de caracteres Unicode 3.0 ocupa um espaço de código de 16 bits. A codificação Unicode mais óbvia (conhecida como UCS-2) consiste de uma sequência de palavras de 16 bits. Tais palavras podem conter, como parte de seus vários caracteres de 16 bits, bytes 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 adequada de Unicode em nomes de arquivos, arquivos-texto, variáveis de ambiente, etc. O Universal Character Set (UCS), um superconjunto de Unicode da ISO/IEC 10646, ocupa um espaço de código ainda maior — 31 bits — e a óbvia codificação UCS-4 para ele (uma sequê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 mais comum de usar o conjunto de caracteres Unicode sob sistemas operacionais do estilo Unix.
A codificação UTF-8 tem as seguintes belas propriedades:
As seguintes sequências de bytes são usadas para representar um caractere. A sequência a ser usada depende do número de código UCS do caractere:
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, com o primeiro bit mais significante primeiro (big-endian). Somente a sequência multibyte mais curta possível que pode representar o número do código do caractere pode ser usada.
Os valores de código UCS 0xd800–0xdfff (substitutos UTF-16) assim como 0xfffe e 0xffff (não-caracteres UCS) não 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.
O caractere Unicode 0xa9 = 1010 1001 (o sinal de copyright) é codificado em UTF-8 como
e o caractere 0x2260 = 0010 0010 0110 0000 (o símbolo de "diferente") é codificado como:
Usuários tem que selecionar uma localidade UTF-8, por exemplo, com
para ordenar a ativação do suporte UTF-8 nas aplicações.
Aplicações que tem sido usuárias prevenidas de codificação de caractere sempre deveriam selecionar a localização com, por exemplo,
e programadores podem, então, testar a expressão
para determinar se uma localidade UTF-8 já foi selecionado e se todo texto plano da entrada e saída padrão, comunicação de terminal, conteúdo de texto plano, nomes de arquivos e variáveis de ambiente são codificadas em UTF-8.
Programadores acostumados com codificações de byte único como US-ASCII e ISO/IEC 8859 têm de estar cientes que duas suposições não são mais válidas na localização UTF-8. Primeiramente, um byte simples não corresponde necessariamente a um caractere único. Em segundo lugar, desde os emuladores de terminal modernos em UTF-8 também podem prover suporte a caracteres de tamanho duplo de chinês, japonês e coreano, bem como caracteres de combinação sem espaçamento, emitindo um caractere único não necessariamente avançando o cursor por uma posição como é feito em ASCII. Bibliotecas de funções como mbsrtowcs(3) e wcswidth(3) devem ser usadas nos dias atuais para contar caracteres e posições de cursor.
A sequência oficial de ESC para alternar, oriunda do esquema de codificação ISO/IEC 2022 (como usada, por exemplo, por terminais VT100) para UTF-8 é ESC % G ("\x1b%G"). O sequência de retorno correspondente da UTF-8 para ISO/IEC 2022 é ESC % @ ("\x1b%@"). Outras sequências ISO/IEC 2022 (tais como para trocar os conjuntos G0 e G1) não são aplicadas no modo UTF-8.
Os padrões Unicode e UCS requerem que produtores de UTF-8 usem a menor forma possível, isto é, produzindo uma sequência de dois bytes sendo o primeiro 0xc0. Unicode 3.1 foi adicionada um requisição que programas não devem aceitar formas não-reduzidas em suas entradas. Por razões de segurança: se a entrada do usuário for verificada, contra violações de segurança, um programa poderia verificar somente pelas versões ASCII de "/../" ou ";" ou NUL e negar que há muitas maneiras non-ASCII de representar isto nas formas não-reduzidas UTF-8.
ISO/IEC 10646-1:2000, Unicode 3.1, RFC 3629, Plan 9.
locale(1), nl_langinfo(3), setlocale(3), charsets(7), unicode(7)
A tradução para português brasileiro desta página man foi criada por Rubens de Jesus Nogueira <darkseid99@usa.net>, André Luiz Fassone <lonely_wolf@ig.com.br> e Rafael Fontenelle <rafaelff@gnome.org>.
Esta tradução é uma documentação livre; leia a Licença Pública Geral GNU Versão 3 ou posterior para as condições de direitos autorais. Nenhuma responsabilidade é aceita.
Se você encontrar algum erro na tradução desta página de manual, envie um e-mail para a lista de discussão de tradutores.
| 15 junho 2024 | Linux man-pages 6.9.1 |