table of contents
- bookworm-backports 4.25.1-1~bpo12+1
- testing 4.25.1-1
- unstable 4.26.0-1
UTF-8(7) | Miscellaneous Information Manual | UTF-8(7) |
NOME¶
UTF-8 - uma codificação Unicode multibyte compatível com ASCII
DESCRIÇÃO¶
The Unicode 3.0 character set occupies a 16-bit code space. The most obvious Unicode encoding (known as UCS-2) consists of a sequence of 16-bit words. Such strings can contain—as part of many 16-bit characters—bytes such as '\0' or '/', which have a special meaning in filenames and other C library function arguments. In addition, the majority of UNIX tools expect ASCII files and can't read 16-bit words as characters without major modifications. For these reasons, UCS-2 is not a suitable external encoding of Unicode in filenames, text files, environment variables, and so on. The ISO 10646 Universal Character Set (UCS), a superset of Unicode, occupies an even larger code space—31 bits—and the obvious UCS-4 encoding for it (a sequence of 32-bit words) has the same problems.
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.
Propriedades¶
A codificação UTF-8 tem as seguintes belas propriedades:
- *
- UCS characters 0x00000000 to 0x0000007f (the classic US-ASCII characters) are encoded simply as bytes 0x00 to 0x7f (ASCII compatibility). This means that files and strings which contain only 7-bit ASCII characters have the same encoding under both ASCII and UTF-8 .
- *
- All UCS characters greater than 0x7f are encoded as a multibyte sequence consisting only of bytes in the range 0x80 to 0xfd, so no ASCII byte can appear as part of another character and there are no problems with, for example, '\0' or '/'.
- *
- 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 0xc0, 0xc1, 0xfe e 0xff nunca são usados na codificação UTF-8.
- *
- O primeiro byte de uma sequência multibyte que representa um único caractere UCS não-ASCII está sempre na faixa 0xc2 a 0xfd, e indica o tamanho desta sequência multibyte. Todos os bytes seguintes na sequência multibyte estão na faixa de 0x80 a 0xbf. Isto permite uma ressincronização fácil e torna a codificação independente de estado, e robusta contra perda de bytes.
- *
- UTF-8 codificados em UCS podem ter até seis bytes de comprimento, porém os caracteres Unicode padrão específica nenhum caractere acima de 0x10ffff, assim caracteres Unicode somente podem ter mais de quatro bytes de comprimento em UTF-8.
Codificação¶
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:
- 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, 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.
Exemplo¶
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:
Notas para aplicação¶
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.
Programmers accustomed to single-byte encodings such as US-ASCII or ISO 8859 have to be aware that two assumptions made so far are no longer valid in UTF-8 locales. Firstly, a single byte does not necessarily correspond any more to a single character. Secondly, since modern terminal emulators in UTF-8 mode also support Chinese, Japanese, and Korean double-width characters as well as nonspacing combining characters, outputting a single character does not necessarily advance the cursor by one position as it did in ASCII. Library functions such as mbsrtowcs(3) and wcswidth(3) should be used today to count characters and cursor positions.
The official ESC sequence to switch from an ISO 2022 encoding scheme (as used for instance by VT100 terminals) to UTF-8 is ESC % G ("\x1b%G"). The corresponding return sequence from UTF-8 to ISO 2022 is ESC % @ ("\x1b%@"). Other ISO 2022 sequences (such as for switching the G0 and G1 sets) are not applicable in UTF-8 mode.
Segurança¶
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.
Padrões¶
ISO/IEC 10646-1:2000, Unicode 3.1, RFC 3629, Plan 9.
VEJA TAMBÉM¶
locale(1), nl_langinfo(3), setlocale(3), charsets(7), unicode(7)
TRADUÇÃO¶
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.
10 fevereiro 2023 | Linux man-pages 6.03 |