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.
Colunas
Clique em uma célula para copiar o valor.
Tabela A: ASCII, de 0 a 127
128 de 128 códigos
| Dec | Hex | Oct | Binário | Caractere | Descrição |
|---|---|---|---|---|---|
| ^@ caractere nulo (NUL) | |||||
| ^A início de cabeçalho (SOH) | |||||
| ^B início de texto (STX) | |||||
| ^C fim de texto (ETX), o Ctrl+C | |||||
| ^D fim de transmissão (EOT), o Ctrl+D | |||||
| ^E consulta (ENQ) | |||||
| ^F confirmação (ACK) | |||||
| ^G campainha (BEL) | |||||
| ^H backspace (BS) | |||||
| ^I tabulação (TAB) | |||||
| ^J quebra de linha (LF) | |||||
| ^K tabulação vertical (VT) | |||||
| ^L nova página (FF) | |||||
| ^M retorno de carro (CR) | |||||
| ^N shift out (SO) | |||||
| ^O shift in (SI) | |||||
| ^P escape de link de dados (DLE) | |||||
| ^Q controle de dispositivo 1 (DC1), o XON | |||||
| ^R controle de dispositivo 2 (DC2) | |||||
| ^S controle de dispositivo 3 (DC3), o XOFF | |||||
| ^T controle de dispositivo 4 (DC4) | |||||
| ^U confirmação negativa (NAK) | |||||
| ^V sincronização (SYN) | |||||
| ^W fim de bloco de transmissão (ETB) | |||||
| ^X cancelar (CAN) | |||||
| ^Y fim do meio (EM) | |||||
| ^Z substituir (SUB), o Ctrl+Z | |||||
| ^[ escape (ESC) | |||||
| ^\ separador de arquivo (FS) | |||||
| ^] separador de grupo (GS) | |||||
| ^^ separador de registro (RS) | |||||
| ^_ separador de unidade (US) | |||||
| espaço | |||||
| ponto de exclamação | |||||
| aspas duplas | |||||
| cerquilha (jogo da velha) | |||||
| cifrão | |||||
| porcentagem | |||||
| e comercial | |||||
| aspas simples (apóstrofo) | |||||
| abre parênteses | |||||
| fecha parênteses | |||||
| asterisco | |||||
| mais | |||||
| vírgula | |||||
| hífen (sinal de menos) | |||||
| ponto | |||||
| barra | |||||
| dígito 0 | |||||
| dígito 1 | |||||
| dígito 2 | |||||
| dígito 3 | |||||
| dígito 4 | |||||
| dígito 5 | |||||
| dígito 6 | |||||
| dígito 7 | |||||
| dígito 8 | |||||
| dígito 9 | |||||
| dois-pontos | |||||
| ponto e vírgula | |||||
| menor que | |||||
| igual | |||||
| maior que | |||||
| interrogação | |||||
| arroba | |||||
| letra maiúscula A | |||||
| letra maiúscula B | |||||
| letra maiúscula C | |||||
| letra maiúscula D | |||||
| letra maiúscula E | |||||
| letra maiúscula F | |||||
| letra maiúscula G | |||||
| letra maiúscula H | |||||
| letra maiúscula I | |||||
| letra maiúscula J | |||||
| letra maiúscula K | |||||
| letra maiúscula L | |||||
| letra maiúscula M | |||||
| letra maiúscula N | |||||
| letra maiúscula O | |||||
| letra maiúscula P | |||||
| letra maiúscula Q | |||||
| letra maiúscula R | |||||
| letra maiúscula S | |||||
| letra maiúscula T | |||||
| letra maiúscula U | |||||
| letra maiúscula V | |||||
| letra maiúscula W | |||||
| letra maiúscula X | |||||
| letra maiúscula Y | |||||
| letra maiúscula Z | |||||
| abre colchetes | |||||
| barra invertida | |||||
| fecha colchetes | |||||
| circunflexo | |||||
| sublinhado (underscore) | |||||
| crase (acento grave) | |||||
| letra minúscula a | |||||
| letra minúscula b | |||||
| letra minúscula c | |||||
| letra minúscula d | |||||
| letra minúscula e | |||||
| letra minúscula f | |||||
| letra minúscula g | |||||
| letra minúscula h | |||||
| letra minúscula i | |||||
| letra minúscula j | |||||
| letra minúscula k | |||||
| letra minúscula l | |||||
| letra minúscula m | |||||
| letra minúscula n | |||||
| letra minúscula o | |||||
| letra minúscula p | |||||
| letra minúscula q | |||||
| letra minúscula r | |||||
| letra minúscula s | |||||
| letra minúscula t | |||||
| letra minúscula u | |||||
| letra minúscula v | |||||
| letra minúscula w | |||||
| letra minúscula x | |||||
| letra minúscula y | |||||
| letra minúscula z | |||||
| abre chaves | |||||
| barra vertical (pipe) | |||||
| fecha chaves | |||||
| til | |||||
| ^? apagar (DEL) |
Tabela B: de 128 a 255
128 de 128 códigos
| Dec | Hex | Windows-1252 | ISO-8859-1 | Unicode | Bytes UTF-8 | HTML | UTF-8 lido como Windows-1252 |
|---|---|---|---|---|---|---|---|
| controle C1 | |||||||
| sem caractere | controle C1 | ||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| sem caractere | controle C1 | ||||||
| controle C1 | |||||||
| sem caractere | controle C1 | ||||||
| sem caractere | controle C1 | ||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| controle C1 | |||||||
| sem caractere | controle C1 | ||||||
| controle C1 | |||||||
| controle C1 | |||||||
Esta faixa não é ASCII. É o que costuma ser chamado de ASCII estendido, e cada tabela põe uma coisa diferente aqui. A tabela mostra o Windows-1252 e o ISO-8859-1 lado a lado, com os bytes em UTF-8 e o que aparece quando o UTF-8 é lido como Windows-1252.
Os códigos 0x81, 0x8D, 0x8F, 0x90 e 0x9D não têm caractere no Windows-1252. No ISO-8859-1, toda a faixa de 128 a 159 é de controles C1.
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.
| Caractere | Alt+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 inputNã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 // 4Por 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
latin1em vez deutf8mb4. 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
charsetno headerContent-Type. O navegador chuta a codificação. - Arquivo salvo como "ANSI", que no Windows em português é o Windows-1252.
btoaaceita só caracteres até 255.btoa("€")dáInvalidCharacterError, ebtoa("ç")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; // 18O 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: