ASCII e Unicode: o que são e para que servem

Um computador só entende números, então cada letra que você vê na tela é um código. O ASCII foi a primeira tabela de códigos que virou padrão e o Unicode é a que usamos hoje para escrever em qualquer idioma. Aqui você vê como funcionam, quais códigos vale conhecer, por que às vezes aparecem símbolos estranhos no lugar dos acentos e como consultar tudo na tabela.

Atualizado:

O que é uma codificação de caracteres

Uma codificação é um acordo: “o número 65 significa a letra A”. Quando você escreve um texto, o programa guarda esses números; quando outra pessoa o abre, o programa dela os traduz de volta em letras usando o mesmo acordo. Se os dois não usam a mesma tabela, o texto sai errado.

É preciso separar duas ideias. Uma é o conjunto de caracteres, a lista de quais números correspondem a quais símbolos. A outra é como esses números são guardados em bytes. No ASCII as duas coincidem de forma trivial; no Unicode não, e é aí que entra o UTF-8.

ASCII: 128 caracteres de 7 bits

O ASCII (sigla de American Standard Code for Information Interchange) foi padronizado na década de 1960. Usa 7 bits, ou seja, 2 elevado a 7 = 128 códigos, de 0 a 127. Destes, 33 são caracteres de controle (de 0 a 31 e o 127) e 95 são imprimíveis (de 32 a 126, incluindo o espaço).

Não inclui letras acentuadas, nem o ç, nem o símbolo do euro: foi desenhado para o inglês. Isso explica por que depois foram necessárias outras tabelas.

Os códigos que você mais vai encontrar. O espaço (32) conta como imprimível mesmo sem aparecer.
Caractere de controleDecimalHexadecimalBinário (7 bits)Para que serve
Nulo (NUL)0000000000Marca o fim de uma cadeia de texto em várias linguagens
Tabulação horizontal (TAB)9090001001Salta para o próximo tabulador
Avanço de linha (LF)100A0001010Desce para a linha seguinte
Retorno de carro (CR)130D0001101Volta ao começo da linha
Escape (ESC)271B0011011Inicia sequências de controle
Espaço32200100000Primeiro caractere imprimível
Apagar (DEL)1277F1111111Apaga o caractere

Relações que vale lembrar

A tabela não está ordenada ao acaso. Com algumas regularidades você consegue ler códigos de cabeça.

Fim de linha: LF, CR e CRLF

Uma quebra de linha parece algo simples, mas se escreve de forma diferente conforme o sistema. Unix, Linux e macOS usam um único caractere, LF (10). O Windows usa dois seguidos, CR e LF (13 e 10), conhecidos como CRLF. Os velhos teletipos precisavam de duas ordens diferentes: voltar o carro ao começo e avançar o papel uma linha.

Essa diferença é a causa de arquivos que aparecem todos em uma linha em um editor básico, ou com um símbolo estranho no fim de cada linha. Se você quer saber que código cada um tem, digite LF ou CR na busca da tabela ASCII.

O “ASCII estendido” não é um padrão

Como um byte tem 8 bits e o ASCII só usa 7, sobravam 128 códigos livres (de 128 a 255) e cada fabricante e região os preencheu à sua maneira. Isso é conhecido como “ASCII estendido”, mas não existe uma única tabela: há muitas, chamadas páginas de código. Duas das mais conhecidas são a Latin-1 (ISO-8859-1), onde o é é o código 233, e a Windows-1252, parecida mas com diferenças nos códigos 128 a 159 (ali está, por exemplo, o euro).

O problema é que o código 233 significa “é” em uma tabela e outra coisa em outra. Um texto escrito com uma tabela e lido com outra mostrava lixo. O Unicode nasceu para acabar com essa bagunça.

Unicode e UTF-8

O Unicode atribui um número único, chamado ponto de código, a cada caractere de quase todos os sistemas de escrita do mundo, além de símbolos e emojis. Hoje tem mais de 150.000 caracteres. Escreve-se com o prefixo U+ e em hexadecimal: o “A” é U+0041, o “ã” é U+00E3, o euro é U+20AC e o emoji de rosto sorridente é U+1F600. Os primeiros 128 pontos de código são exatamente os do ASCII.

O UTF-8 é a forma mais usada de guardar esses números em bytes, e usa de 1 a 4 conforme o caractere. Os 128 do ASCII ocupam um único byte idêntico ao de sempre, então um texto ASCII também é um texto UTF-8 válido. O resto ocupa mais bytes.

Quanto mais longe do ASCII, mais bytes o caractere ocupa.
CaracterePonto de códigoBytes em UTF-8Bytes (hexadecimal)
AU+0041141
éU+00E92C3 A9
ãU+00E32C3 A3
€U+20AC3E2 82 AC
😀U+1F6004F0 9F 98 80

Por que aparece “ã” no lugar de “ã”

É o erro mais comum e tem explicação exata. O ã em UTF-8 são dois bytes: C3 e A3. Se um programa acha que o texto está em Latin-1, lê cada byte como um caractere: o C3 é “Ã” e o A3 é “£”. Resultado: “ã”. Acontece o mesmo com “é”, que aparece como “é”, e com “ação”, que aparece como “ação”.

A solução quase sempre é indicar ao programa que abra o arquivo como UTF-8 (em um editor de texto ou na configuração da importação de uma planilha). Quando acontece o contrário, texto em Latin-1 lido como UTF-8, costumam aparecer losangos com um ponto de interrogação, porque esses bytes soltos não formam sequências UTF-8 válidas.

Como usar a tabela ASCII e o conversor

A ferramenta “Tabela ASCII” mostra os 128 caracteres com seu código em decimal, hexadecimal, octal e binário, e o nome dos de controle.

  1. Digite na busca um caractere, um código ou o nome de um de controle (por exemplo A, 65, 41 ou LF) para encontrar a linha dele.
  2. Use os botões de filtro (Controle, Dígitos, Maiúsculas, Minúsculas, Sinais) para ver só um grupo.
  3. Para converter, digite um texto em “Texto” e escolha o formato (decimal, hexadecimal, octal ou binário): embaixo aparecem os códigos. “Ola” dá 79 108 97 em decimal e 4F 6C 61 em hexadecimal.
  4. Também dá para fazer o contrário: cole códigos separados por espaços ou vírgulas em “Códigos” e o texto é montado. Em hexadecimal são aceitos prefixos como 0x41.

Se o texto tem caracteres que não são ASCII, como o ã, a ferramenta avisa e mostra o código Unicode dele. Para ver os bytes reais em UTF-8, use “Texto para binário”: o ã dá 11000011 10100011, dois bytes de 8 bits. Os limites: a tabela mostra só o ASCII padrão, não o estendido, e tudo é calculado no seu navegador sem enviar o texto a nenhum servidor.

Perguntas frequentes

Quantos caracteres tem o ASCII?

128, com códigos de 0 a 127 e 7 bits cada um. Destes, 33 são de controle e 95 são imprimíveis, contando o espaço.

Qual é o código ASCII da letra A e da a?

A “A” é 65 (41 em hexadecimal, 01000001 em binário) e a “a” é 97 (61 em hexadecimal, 01100001 em binário). Sempre diferem em 32.

Qual é a diferença entre ASCII e Unicode?

O ASCII tem 128 caracteres pensados para o inglês. O Unicode tem mais de 150.000, de quase todos os idiomas e emojis, e seus primeiros 128 são os mesmos do ASCII.

O que é UTF-8?

É a forma mais usada de guardar texto Unicode em bytes. Usa de 1 a 4 bytes por caractere: os do ASCII ocupam um, um ã ocupa dois e um emoji quatro.

Por que o meu texto mostra “ã” ou “é”?

Porque um texto guardado em UTF-8 está sendo lido como Latin-1. Abra o arquivo indicando a codificação UTF-8 e o problema se resolve.