Tabela Alfanumerica - Tabela Alfanumérica e Codificação | PDF
Tabela Alfanumérica e Codificação | PDF

O que é e como funciona na prática

A tabela alfanumerica é uma referência que mapeia cada caractere utilizável — letras, números e símbolos — a um código numérico. O padrão mais comum no Brasil é a codepage 437 do DOS, mas dependendo do contexto você pode encontrar a ISO-8859-1, a Windows-1252 ou até tabelas proprietárias de máquinas específicas. A diferença prática entre elas é que a 437 usa os valores de 128 a 255 para caracteres gráficos e acentuados, enquanto a 1252 realoca alguns desses espaços para cedilha e outros sinais usados no português. Eu comecei a mexer com isso em meados dos anos 2000, quando precisava extrair texto de um terminal industrial antigo que tinha o font fixo gravado num chip. O programa que eu usava exibia tudo em caracteres corrompidos porque a aplicação esperava a 437 e o terminal estava mandando byte a byte como se fosse ASCII puro. A solução foi fazer um conversor intermediário em Python que lia o stream bruto, fazia o mapeamento manual dos bytes 128-255 para a codepage correta e reescrevia o arquivo. Levei uma tarde inteira, mas depois disso consegui entender como qualquer sistema que lida com strings em baixo nível trata isso.

Como montar e consultar uma tabela alfanumerica

O processo básico envolve três coisas: saber qual codepage seu sistema está usando, consultar o mapeamento correto e aplicar a conversão na direção certa. Para encontrar a codepage atual em um sistema Windows, basta rodar chcp no prompt de comando. No Linux, você olha a variável LC_CTYPE ou LANG. Se estiver executando em um sistema embarcado ou legacy, a codepage muitas vezes vem fixa e não tem como alterar sem reflash de firmware. Para construir ou consultar a tabela, você pode usar ferramentas como o Unicode Table online, o programa CharMap do Windows, ou simplesmente rodar um comando rápido:

Em Python: python -c "for i in range(256): print(f'{i:02X} {chr(i) if i 128 else \"?\"}')"

Isso gera os 256 valores hexadecimais com seu caractere correspondente na codepage padrão do sistema. O problema é que caracteres acima de 127 podem variar dependendo do ambiente, então o mais seguro é especificar a codepage explicitamente: python -c "import codecs; [print(f'{i:02X} {bytes([i]).decode(\"cp437\")}') for i in range(256)]"

👉 Clique no botão abaixo para saber mais sobre o assunto!

Esse comando força a decodificação pela codepage 437, o que elimina ambiguidades em máquinas que têm a configuração regional alterada.

Pegadinhas que ninguém conta

A coisa mais complicada com tabela alfanumerica não é ler a tabela em si, é lidar com a inconsistência entre o que você vê e o que o sistema realmente processa. Um exemplo claro: o caractere Ç (cedilha maiúscula) aparece na posição 128 na ISO-8859-1, mas na posição 128 da codepage 437 é um símbolo de caixa diferente. Se você estiver migrando dados de um sistema legado para um novo, e esses sistemas usarem codepages diferentes, letras como Ç, Á, É, Õ vão pras posições erradas durante a conversão. O resultado é texto ilegível que parece correto na superfície porque os bytes existem, só que mapeados pro lugar errado. Outro detalhe importante: muitos programas modernos convertem automaticamente para UTF-8, mas isso não significa que a tabela alfanumerica subjacente tenha sido respeitada. O UTF-8 codifica caracteres em uma ou mais bytes, então um único caractere como "ã" vira dois bytes (0xC3 0xA3). Se você tratar esse stream como se fosse uma codepage de 8 bits, vai quebrar tudo. A dica prática é nunca assumir encoding. Sempre especifique. Em Python, abra arquivos com encoding='cp437' ou encoding='latin1' conforme o caso. Em C#, use Encoding.GetEncoding(437). Se estiver lidando com hardware, consulte o datasheet do chipset ou do controlador — a maioria dos manuais de equipamentos industriais traz a codepage exata na seção de comunicação serial.

Um caso bem específico que eu enfrentei foi num sistema de etiqueta térmica onde o driver enviava comandos PCL e os caracteres especiais eram ignorados. O problema não era a tabela em si, mas o fato de o driver não suportar a subset de codepage que eu estava usando. O workaround foi converter as etiquetas para caracteres ASCII puros usando substituição — troquei Ç por C, Õ por O, etc. — e ajustar o layout para compensar a diferença de largura. Funcionou, mas custou duas semanas de teste porque o sistema de impressão tinha um buffer de 64 bytes e qualquer caractere fora do esperado truncava a linha inteira.

Quando a tabela alfanumerica não resolve

Existem situações onde confiar na tabela de codepage simplesmente não funciona. O principal cenário é quando você precisa lidar com scripts não latinos — árabe, cirílico, japonês — onde a ideia de um mapeamento 1:1 entre byte e caractere não existe mais. Nesses casos, a tabela alfanumerica tradicional é insuficiente e você precisa migrar para Unicode com UTF-8 ou UTF-16. Outra limitação séria é em sistemas embarcados com memória extremamente restrita: manter múltiplas codepages na RAM pode ser inviável, e aí a solução é trabalhar com um subconjunto fixo de caracteres que o hardware suporta nativamente. Se o seu objetivo é apenas gerar uma tabela de consulta rápida para uso próprio, a opção mais prática é salvar um arquivo CSV com três colunas: código decimal, código hexadecimal e caractere. Você pode gerar isso com qualquer script e importar no Excel ou Numbers para consultar durante o desenvolvimento. Eu costumo manter um arquivo desses atualizado com as três codepages mais usadas — 437, 1252 e 850 — porque já vi projeto inteiro ser atrasado por causa de um caractere mal interpretado numa comunicação serial.