Tabela ASCII

Os 128 códigos ASCII em decimal, hex, octal e binário, com entidade HTML e escape de JS. Logo abaixo, a faixa de 128 a 255 do Windows-1252, onde ficam os acentos.

Aceita o caractere, o código em decimal, hex (0x41 ou 41h), U+0041 ou o nome. A busca vale para as duas tabelas.
Colunas

Clique em uma célula para copiar o valor.

Códigos Alt no Windows

Segure Alt e digite o número no teclado numérico (a fileira de cima não funciona). Sem zero na frente, Alt+NNN usa a CP850, a code page do prompt do Windows em português, espanhol, francês e alemão (nos EUA é a CP437). Com zero na frente, Alt+0NNN usa o Windows-1252.

Códigos Alt dos caracteres mais procurados
CaractereAlt+NNN (CP850)Alt+0NNN (Windows-1252)
não existe

O que é ASCII

ASCII é uma tabela de 128 códigos, de 0 a 127, que usa 7 bits por caractere. Nasceu nos anos 60 como padrão americano (ANSI X3.4) e está descrita no RFC 20. Cabem nela as letras sem acento, os dígitos, a pontuação e 33 caracteres de controle que não aparecem na tela.

Tudo acima de 127 já não é ASCII, mesmo quando alguém chama de "ASCII estendido".

Caracteres de controle que ainda aparecem no dia a dia

Dos 33 caracteres de controle, a maioria ficou sem uso, mas alguns você encontra toda semana. O NUL (0) marca o fim de uma string em C e aparece em arquivo binário. O TAB (9) é a tabulação. O LF (10) e o CR (13) formam a quebra de linha: Linux e macOS usam só o LF, o Windows usa o par CR e LF (CRLF). O ESC (27) abre as sequências de cor do terminal, e o DEL (127) é o único controle fora da faixa de 0 a 31.

A diferença de quebra de linha dá bug de verdade, como script de shell que não roda por causa do CR no fim da linha. O Git pode converter no commit e no checkout, conforme o core.autocrlf: true no Windows e input no Mac e no Linux costuma resolver. Em CSV, uma quebra de linha dentro de um campo só é lida certo se o campo estiver entre aspas.

git config --global core.autocrlf input

Não existe um só "ASCII estendido"

Quem fala em "ASCII estendido" quase sempre quer dizer uma de três tabelas: ISO-8859-1, Windows-1252 ou CP850. Elas batem de 0 a 127 e mudam daí para cima. E o navegador nem trata "latin1" como ISO-8859-1: pelo Encoding Standard do WHATWG, "latin1", "iso-8859-1" e até "ascii" são lidos como Windows-1252.

O ISO-8859-1 (de 1987) usa 128 a 159 para controles C1, que ninguém digita. O Windows-1252 põe símbolos úteis nesses 32 códigos, como €, “ ”, … e •, e deixa só cinco vazios. A CP850 é outra coisa: é a code page do prompt do Windows e dos códigos Alt, e nela o "ç" vale 135, não 231.

Quando precisar de uma dessas tabelas, diga o nome dela. "ASCII" só vale até o 127.

ASCII, Unicode e UTF-8

Unicode é a lista de todos os caracteres, e UTF-8 é a forma mais comum de gravar esses caracteres em bytes. De 0 a 127, o UTF-8 usa um byte com o mesmo valor do ASCII, então um arquivo só com ASCII é idêntico nos dois. Daí para cima, cada caractere ocupa de 2 a 4 bytes: letra com acento ocupa 2, um símbolo como € ocupa 3 e um emoji ocupa 4.

Isso pesa quando o limite é em bytes, como num campo de banco ou num header. O Contador de Caracteres e Palavras mostra os dois números lado a lado. Em JavaScript, repare que length conta code units, não caracteres nem bytes:

"ç".length                             // 1
new TextEncoder().encode("ç").length   // 2
"😀".length                            // 2
new TextEncoder().encode("😀").length  // 4

Por que o "ç" vira "ç"

O "ç" em UTF-8 ocupa dois bytes, C3 e A7. Se um programa lê esses bytes como Windows-1252, cada byte vira um caractere: C3 é "Ã" e A7 é "§". Daí o "ç" no lugar do "ç". Quase sempre uma das pontas está configurada errada: o banco em latin1, o CSV salvo sem BOM, o header Content-Type sem charset ou o arquivo salvo como "ANSI".

As causas mais comuns por aqui:

  • Tabela do MySQL em latin1 em vez de utf8mb4. O dado entra certo e sai errado, ou o contrário.
  • CSV em UTF-8 aberto no Excel sem BOM. O Excel assume a code page do Windows e mostra o mojibake.
  • Resposta HTTP sem charset no header Content-Type. O navegador chuta a codificação.
  • Arquivo salvo como "ANSI", que no Windows em português é o Windows-1252.
  • btoa aceita só caracteres até 255. btoa("€") dá InvalidCharacterError, e btoa("ç") funciona mas codifica o byte E7 (latin1), não C3 A7 (UTF-8). Para Base64 de UTF-8, converta antes para bytes. O Decodificador de Base64 faz isso.
btoa("€");                                              // InvalidCharacterError
btoa("ç");                                              // "5w==" (byte E7)
btoa(String.fromCharCode(...new TextEncoder().encode("ç"))); // "w6c=" (bytes C3 A7)
ALTER TABLE clientes CONVERT TO CHARACTER SET utf8mb4;

O hash tem o mesmo problema: o SHA-256 de "ç" não é o mesmo em latin1 (byte E7) e em UTF-8 (bytes C3 A7). Se o hash não bate com o do outro sistema, confira a codificação do texto no Gerador de Hash.

ASCII no código

A tabela ajuda a entender truques que aparecem em todo código. Letras maiúsculas e minúsculas diferem em 32 (um bit), e os dígitos de "0" a "9" ocupam 48 a 57, então c - '0' em C ou Java transforma o caractere em número. Em regex, [ -~] casa os imprimíveis, do espaço (32) ao til (126).

"a".charCodeAt(0) - "A".charCodeAt(0); // 32
"7".charCodeAt(0) - "0".charCodeAt(0); // 7
/^[ -~]*$/.test("Olá");                // false
"B".charCodeAt(0) - 48;                // 18

O CNPJ alfanumérico usa a mesma ideia. Para calcular o dígito verificador, cada caractere vale o código ASCII menos 48: "0" a "9" continuam valendo 0 a 9, "A" vale 17, "B" vale 18 e assim até o "Z", que vale 42. Para ver isso funcionando, use o Gerador de CNPJ ou confira um número no Validador de CNPJ.

Entidades HTML e escapes

Em HTML, você só precisa de entidade para os caracteres que o parser lê como marcação: &, < e >, mais " dentro de atributo. O   é o espaço sem quebra, o código 160, e não é igual ao espaço comum (32).

Com a página em UTF-8, acento e símbolo podem ir direto no HTML: não precisa de ç nem de ç. Em JavaScript e JSON, o escape \u00e7 serve quando o arquivo não é UTF-8, e \n, \t e \ são as formas curtas. Em URL, o "ç" vira %C3%A7, que são os bytes UTF-8.

Códigos Alt no Windows

O código Alt não é ASCII. Alt+NNN, sem zero, usa a CP850 no Windows em português, espanhol, francês e alemão: Alt+135 digita o "ç". Alt+0NNN, com zero na frente, usa o Windows-1252: Alt+0231 digita o mesmo "ç". O número muda porque a tabela muda.

Digite sempre no teclado numérico, com o Num Lock ligado. Em notebook sem teclado numérico, o jeito mais simples é copiar o caractere da tabela acima.

Fontes

Conferidas em 3 de novembro de 2026: