Saltar para o conteúdo
BCBinary Code Translator
Menu
Voltar ao blog
Guia

ASCII, Unicode e UTF-8: diferenças com exemplos práticos

Distinga carateres, pontos de código e bytes. Um guia prático de ASCII, Unicode e UTF-8 para diagnosticar texto corrompido sem confundir as camadas.

4 min de leitura
Por Binary Code Translator
#ascii#unicode#utf-8#codificação#depuração

Mapa das camadas entre texto, Unicode e bytes UTF-8

ASCII, Unicode e UTF-8 aparecem muitas vezes na mesma conversa, mas não designam a mesma coisa. A distinção é essencial ao investigar texto ilegível, símbolos substituídos por U+FFFD ou dados que mudam ao passar entre uma API, uma base de dados e um ficheiro.

Em resumo:

  • ASCII é um conjunto codificado de 128 carateres com valores de 0 a 127.
  • Unicode atribui pontos de código a carateres e outros elementos de texto.
  • UTF-8 transforma pontos de código Unicode numa sequência de bytes.

Três camadas que não devem ser confundidas

Considere a letra A:

  1. O caráter visível é A.
  2. O ponto de código Unicode é U+0041.
  3. Em UTF-8, o byte é 41 em hexadecimal, ou 01000001 em binário.

Agora considere :

  1. O caráter visível é .
  2. O ponto de código é U+4E2D.
  3. Em UTF-8, os bytes são E4 B8 AD.

Um ponto de código não é, por si só, um byte. Também não é correto afirmar que todos os carateres ocupam oito bits. Os carateres ASCII ocupam um byte em UTF-8; outros pontos de código podem ocupar dois, três ou quatro bytes.

Onde entra o ASCII

ASCII continua presente em protocolos, formatos de texto, terminais e linguagens de programação. O conjunto inclui letras latinas sem acentos, algarismos, pontuação e carateres de controlo. O valor 65 corresponde a A, mas o padrão é de 7 bits; a apresentação 01000001 acrescenta um zero inicial para mostrar o valor num byte.

UTF-8 preserva esta zona: os valores ASCII de 0 a 127 usam os mesmos bytes. Esta compatibilidade explica por que motivo um ficheiro ASCII válido também é UTF-8 válido.

O que o Unicode resolve

Unicode fornece um repertório e regras comuns para texto de vários sistemas de escrita, símbolos e emoji. O padrão distingue carateres abstratos de representações concretas. Uma letra visível pode ainda ser composta por mais de um ponto de código, como uma letra seguida de um sinal combinante.

UTF-8 e UTF-16 são formas diferentes de codificar o mesmo espaço de pontos de código. Em JavaScript, as cadeias de texto são observadas através de unidades de código UTF-16; isto explica por que razão alguns emoji contam como duas unidades em length, apesar de serem um único ponto de código.

Diagnóstico de texto corrompido

Quando aparece mojibake, confirme a sequência completa:

  1. Identifique a codificação original do ficheiro ou da resposta.
  2. Verifique o cabeçalho HTTP, por exemplo:
Content-Type: text/html; charset=utf-8
  1. Confirme a codificação da ligação e das colunas da base de dados.
  2. Evite descodificar os mesmos bytes duas vezes.
  3. Compare os bytes em hexadecimal antes e depois de cada etapa.
  4. Confirme que a fonte possui um glifo para o caráter; a ausência de glifo não altera o ponto de código.

Uma sequência que apresente separadamente os valores U+00C3 e U+00A1 no lugar de á, por exemplo, costuma indicar que bytes UTF-8 foram interpretados como outra codificação de oito bits. Alterar o tipo de letra não corrige esse erro: é necessário interpretar novamente os bytes com a codificação correta.

Teste prático no navegador

Use o conversor de texto para binário para comparar A, á, e 😀. Depois recupere o texto com o conversor de binário para texto. Para transportar os mesmos bytes em texto ASCII, experimente o codificador e descodificador Base64.

O teste de ida e volta deve preservar o texto, mas só quando as duas direções usam a mesma codificação. Base64 não escolhe uma codificação de carateres e não encripta os dados; apenas representa bytes.

Referências

Preferências de cookies

Gerir as preferências de cookies. Os cookies necessários não podem ser desativados.

Necessários

Obrigatório

Necessários para seleção de idioma, escolhas de privacidade e funcionalidades básicas do site.

Cookies: NEXT_LOCALE

Análises

Cookies opcionais de análise ajudam a entender o tráfego e melhorar o site.

Cookies: _ga, _gid, _gat, _clck, _clsk

Publicidade

Cookies opcionais de publicidade podem ser usados para mostrar anúncios relevantes e medir desempenho.

Cookies: __gads, _gcl_au, IDE