Um computador só entende números. Para mostrar a letra A, ele precisa de uma tabela que diga: "o número 65 é o A". Essa tabela é uma codificação de caracteres. A mais antiga ainda usada em toda parte se chama ASCII; a sucessora, o Unicode, é o que hoje permite ler árabe, russo e emojis na mesma página.

Antes do ASCII: o telégrafo

O código Morse do século XIX já representava as letras com sinais, mas era pensado para o ouvido de um operador, não para uma máquina: cada letra tinha uma duração diferente.

Os teletipos do início do século XX adotaram um código de 5 bits, derivado do inventado pelo francês Émile Baudot e padronizado como ITA2. Cinco bits só dão 32 combinações, poucas para letras e números. Por isso um caractere especial alternava entre o modo "letras" e o modo "números", e um único erro de transmissão podia transformar uma mensagem inteira em algarismos.

O nascimento do ASCII (1963-1967)

No início dos anos 1960, cada fabricante de computadores tinha sua própria codificação, e as máquinas não conseguiam trocar texto. A American Standards Association reuniu então um comitê, com IBM e AT&T entre outros, para definir um código comum: o American Standard Code for Information Interchange, ou ASCII.

O comitê escolheu 7 bits, ou seja, 128 caracteres. A primeira versão, de 1963, nem tinha letras minúsculas; elas chegaram com a revisão de 1967, que depois se espalhou por toda parte.

O que tem na tabela ASCII

  • De 0 a 31 e 127: os caracteres de controle. Não aparecem na tela; serviam para comandar os teletipos. Vários continuam em uso: a tabulação (9), a quebra de linha (10), o retorno de carro (13), o Esc (27).
  • 32: o espaço.
  • De 48 a 57: os algarismos de 0 a 9.
  • De 65 a 90: as maiúsculas de A a Z, e de 97 a 122: as minúsculas.
  • O resto: pontuação e símbolos como @, #, $ ou {.
Os 128 códigos ASCII: caracteres de controle, pontuação, números, maiúsculas e minúsculas.
Os 128 códigos ASCII: caracteres de controle, pontuação, números, maiúsculas e minúsculas.

A ordem não é por acaso. As letras seguem a ordem alfabética, o que facilita a ordenação, e uma maiúscula e sua minúscula estão sempre a 32 de distância, o que torna trivial converter uma na outra num programa.

O problema dos acentos

128 caracteres bastam para o inglês, mas não para o resto do mundo. O ASCII não tem ç, ã, é nem nenhuma letra árabe, russa ou chinesa.

Como um byte tem 8 bits, o bit que sobrava foi usado para acrescentar mais 128 caracteres. Mas cada região os preencheu do seu jeito: são as "páginas de código". ISO-8859-1 e Windows-1252 para a Europa Ocidental (e o Brasil), ISO-8859-5 para o cirílico, Windows-1256 para o árabe, Shift-JIS para o japonês…

O mesmo byte podia significar ç no Brasil e uma letra cirílica na Rússia. Lido com a página de código errada, o texto ficava ilegível: é o "mojibake". Muita gente se lembra do "ção" no lugar de "ção" nos e-mails. E era impossível misturar português, russo e árabe no mesmo documento.

Unicode: um número para cada caractere

O Unicode, cuja primeira versão saiu em 1991, resolve o problema pela raiz: cada caractere de cada escrita recebe um número único, o seu ponto de código, seja qual for o país ou o programa.

  • U+0041: A
  • U+00E7: ç
  • U+0627: ا (alif árabe)
  • U+042F: Я (ya cirílico)
  • U+1F600: 😀

O Unicode tem hoje mais de 150 mil caracteres: todas as escritas modernas, muitas antigas, símbolos matemáticos e emojis. Seus 128 primeiros pontos de código são exatamente os do ASCII.

UTF-8: como eles são guardados

O Unicode atribui números; falta gravá-los em bytes. A codificação mais difundida é o UTF-8, criado em 1992 por Ken Thompson e Rob Pike:

  • os caracteres ASCII ocupam 1 byte, exatamente como antes, então um arquivo ASCII também é um arquivo UTF-8 válido;
  • as letras acentuadas, o árabe, o grego, o cirílico e o hebraico ocupam 2;
  • a maioria dos caracteres chineses, japoneses e coreanos ocupa 3;
  • os emojis ocupam 4.
No UTF-8, um caractere ocupa de 1 a 4 bytes conforme o seu ponto de código Unicode.
No UTF-8, um caractere ocupa de 1 a 4 bytes conforme o seu ponto de código Unicode.

Essa compatibilidade com o ASCII explica o sucesso: hoje mais de 98% dos sites usam UTF-8. Se um texto ainda aparece com "ç", quase sempre é porque um programa leu como Windows-1252 algo que estava em UTF-8.

Onde o ASCII ainda aparece

  • No código-fonte: palavras-chave, nomes de variáveis e operadores são quase sempre ASCII.
  • Nos protocolos da web e do e-mail (HTTP, SMTP), que trocam seus comandos em texto ASCII.
  • No terminal, onde as cores ainda são controladas por sequências que começam com o caractere Esc.
  • Nos emoticons como :-) e na arte ASCII, nascidos quando só havia esses 95 caracteres imprimíveis.

Para saber mais

Abdelmounaim Akadid

Abdelmounaim Akadid

Apaixonado por tecnologia, desenvolvimento web e idiomas. Criador do ClavierVirtuel.com, uma ferramenta feita para facilitar a digitação em vários idiomas para todos.

LinkedIn