Enviar um arquivo
  1. base64hub
  2. Outras bases
  3. Base91

Codificador e decodificador Base91 (basE91)

Digite um texto para obter basE91, a codificação que comprime dados binários em 91 caracteres ASCII imprimíveis. Para dados aleatórios, fica cerca de 8% mais curta que o Base64, ao custo de um alfabeto menos amigável.

Grátis sem cadastro, sem limites Local nada é enviado ~23% de overhead em dados aleatórios Atualizado 27 de out. de 2026
Entrada 0Bytes 0 BSaída 0

Processado no seu navegador. Esta página não consegue enviar seus dados para lugar nenhum – como sabemos

Como codificar e decodificar Base91

  1. Digite ou cole o texto em Entrada · Texto. A string codificada aparece em Saída · basE91.
  2. Para dados binários, ajuste De em Hex ou Base64 e cole os dados nesse formato.
  3. Para decodificar, clique em basE91 → Texto no seletor de direção. Quebras de linha na entrada são ignoradas; qualquer outro caractere fora do alfabeto interrompe a decodificação, com a posição indicada.
  4. Use Copiar saída ou Baixar para levar o resultado. Para dados binários decodificados, use Salvar bytes.

Como o basE91 funciona

O basE91 foi publicado por Joachim Henke. O Base64 mapeia cada 6 bits em um caractere. O basE91, em vez disso, junta os bits de entrada em uma fila e retira 13 bits por vez. Dois caracteres representam 91 × 91 = 8281 valores, um pouco mais que os 8192 de que 13 bits precisam. A folga é usada em uma otimização: quando os próximos 13 bits têm valor 88 ou menor, o codificador pega 14 bits e ainda assim escreve dois caracteres.

Por isso o comprimento da saída depende do conteúdo. Em dados aleatórios, grupos de 14 bits são raros (menos de 1,1% dos grupos), então o overhead fica perto de 16/13, cerca de 23%. Dados com muitos bits zero se comprimem melhor: 1000 bytes zero viram 1143 caracteres, 14% de overhead.

EntradabasE91Base64
testfPNKddGVzdA==
Hello>OwJh>ASGVsbG8=
Hello World!>OwJh>Io0Tv!8PESGVsbG8gV29ybGQh
4 bytes zeroAAAAAAAAAAA==
1000 bytes aleatórioscerca de 1230 caracteres1336 caracteres

Os grupos variáveis têm um efeito colateral: não existe tamanho de bloco fixo, então não dá para decodificar a partir do meio de uma string nem dividi-la em pontos arbitrários. O Base64 pode ser dividido em qualquer múltiplo de 4 caracteres.

O alfabeto e onde ele causa problemas

O alfabeto do basE91 é A–Z, a–z, 0–9 e estes 29 caracteres:

!#$%&()*+,./:;<=>?@[]^_`{|}~"

Ficam de fora o espaço, ', - e \. O espaço e o ' causam problemas em shells e em strings entre aspas, e a \ é caractere de escape em quase todo lugar. As aspas duplas continuam, junto com <, > e &, então basE91 dentro de JSON, HTML ou XML precisa de escape, e os escapes comem parte do ganho sobre o Base64. Ele funciona melhor em lugares que aceitam qualquer ASCII imprimível, como um arquivo de texto, um argumento de shell entre aspas simples ou um campo de protocolo que aceita binário.

Um codificador basE91 em Python

Não existe basE91 na biblioteca padrão. O algoritmo de Henke é curto o bastante para incluir aqui:

ALPHABET = ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
            "0123456789!#$%&()*+,./:;<=>?@[]^_`{|}~\"")

def b91encode(data: bytes) -> str:
    out, queue, nbits = [], 0, 0
    for byte in data:
        queue |= byte << nbits
        nbits += 8
        if nbits > 13:
            value = queue & 8191
            if value > 88:
                queue >>= 13
                nbits -= 13
            else:
                value = queue & 16383
                queue >>= 14
                nbits -= 14
            out += ALPHABET[value % 91], ALPHABET[value // 91]
    if nbits:
        out.append(ALPHABET[queue % 91])
        if nbits > 7 or queue > 90:
            out.append(ALPHABET[queue // 91])
    return "".join(out)

b91encode(b"test")    # 'fPNKd'

Ele produz a mesma saída que esta página para qualquer entrada. Mais sobre manipulação de bytes em Python na página de Python.

Quando escolher Base91

Escolha basE91 quando cada byte da saída conta e o canal aceita quase todo ASCII imprimível: logs compactos ou campos de texto com limite rígido de comprimento. Para qualquer coisa que vá para JSON, URLs, HTML ou e-mail, o Base64 é mais seguro e quase tão curto, e o Ascii85 é padronizado no PDF e no PostScript, se você quer 25% de overhead com blocos fixos.

Perguntas frequentes

Quais caracteres o Base91 usa?

Todos os 95 caracteres ASCII imprimíveis, exceto o espaço, o apóstrofo ', o hífen - e a barra invertida \. Sobram letras, dígitos e 29 sinais de pontuação, incluindo as aspas duplas.

O Base91 é menor que o Base85?

Um pouco. Dados aleatórios crescem cerca de 23% em basE91 e exatamente 25% em Base85; 100.000 bytes aleatórios viraram 122.976 caracteres aqui, contra 125.000 em Ascii85. Dados com longas sequências de bytes zero encolhem mais, até cerca de 14% de overhead.

Por que o Base91 não é mais usado?

Ele não tem RFC, a saída contém " e outros caracteres que precisam de escape em JSON, shells e HTML, e os grupos de bits variáveis o tornam mais lento e mais difícil de implementar que o Base64. Os poucos por cento economizados raramente compensam.

Consigo decodificar Base91 gerado por outra biblioteca?

Só se ela usar o alfabeto e a ordem de bits do basE91 de Henke, o que a maioria faz. Algumas bibliotecas trazem alfabetos Base91 próprios; a saída delas decodifica aqui sem erro, mas dá bytes errados.