Subir un archivo
  1. base64hub
  2. Otras bases
  3. Base91

Codificador y decodificador Base91 (basE91)

Escribe texto para obtener basE91, la codificación que empaqueta datos binarios en 91 caracteres ASCII imprimibles. Con datos aleatorios es un 8% más corta que Base64, a cambio de un alfabeto menos cómodo.

Gratis sin registro, sin límites Local no se sube nada ~23% de sobrecarga con datos aleatorios Actualizado 27 oct 2026
Entrada 0Bytes 0 BSalida 0

Se procesa en tu navegador. Esta página no puede enviar tus datos a ninguna parte – cómo lo sabemos

Cómo codificar y decodificar Base91

  1. Escribe o pega texto en Entrada · Texto. La cadena codificada aparece en Salida · basE91.
  2. Para datos binarios, pon De en Hex o Base64 y pégalos en esa forma.
  3. Para decodificar, pulsa basE91 → Texto en el selector de dirección. Los saltos de línea de la entrada se ignoran; cualquier otro carácter fuera del alfabeto detiene la decodificación e indica su posición.
  4. Usa Copiar salida o Descargar con el resultado. Para datos binarios decodificados, usa Guardar bytes.

Cómo funciona basE91

basE91 lo publicó Joachim Henke. Base64 asigna un carácter a cada 6 bits. basE91, en cambio, acumula los bits de entrada en una cola y toma 13 bits cada vez. Dos caracteres pueden representar 91 × 91 = 8281 valores, algo más que los 8192 que necesitan 13 bits. El margen sobrante se aprovecha para una optimización: cuando los 13 bits siguientes valen 88 o menos, el codificador toma 14 bits en su lugar y sigue escribiendo dos caracteres.

Por eso la longitud de la salida depende del contenido. Con datos aleatorios, los grupos de 14 bits son raros (menos del 1,1% de los grupos), así que la sobrecarga se acerca a 16/13, alrededor de un 23%. Los datos con muchos bits a cero se empaquetan mejor: 1000 bytes cero se codifican en 1143 caracteres, un 14% de sobrecarga.

EntradabasE91Base64
testfPNKddGVzdA==
Hello>OwJh>ASGVsbG8=
Hello World!>OwJh>Io0Tv!8PESGVsbG8gV29ybGQh
4 bytes ceroAAAAAAAAAAA==
1000 bytes aleatoriosunos 1230 caracteres1336 caracteres

Los grupos variables tienen un efecto secundario: no hay un tamaño de bloque fijo, así que no puedes decodificar desde la mitad de una cadena ni partirla en puntos arbitrarios. Base64 se puede partir en cualquier múltiplo de 4 caracteres.

El alfabeto y dónde da problemas

El alfabeto basE91 es A–Z, a–z, 0–9 y estos 29 caracteres:

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

Deja fuera el espacio, ', - y \. El espacio y ' dan problemas en la shell y en cadenas entre comillas, y \ es un carácter de escape casi en todas partes. Las comillas dobles siguen dentro, igual que <, > y &, así que basE91 dentro de JSON, HTML o XML necesita escapes, y esos escapes se comen parte de la ventaja sobre Base64. Funciona mejor donde se acepta cualquier ASCII imprimible, como un archivo de texto, un argumento de shell entre comillas simples o un campo de protocolo seguro para binarios.

Un codificador basE91 en Python

La biblioteca estándar no incluye basE91. El algoritmo de Henke es lo bastante corto como para incluirlo:

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'

Produce la misma salida que esta página con cualquier entrada. Encontrarás más sobre el manejo de bytes en Python en la página de Python.

Cuándo elegir Base91

Elige basE91 cuando cada byte de salida cuenta y el canal acepta casi todo el ASCII imprimible: logs compactos o campos de texto con un límite de longitud estricto. Para todo lo que vaya a JSON, URL, HTML o correo electrónico, Base64 es más seguro y casi igual de corto, y Ascii85 está estandarizado en PDF y PostScript si quieres un 25% de sobrecarga con bloques fijos.

Preguntas frecuentes

¿Qué caracteres usa Base91?

Los 95 caracteres ASCII imprimibles excepto el espacio, el apóstrofo ', el guion - y la barra invertida \. Quedan las letras, los dígitos y 29 signos de puntuación, comillas dobles incluidas.

¿Base91 ocupa menos que Base85?

Un poco. Los datos aleatorios crecen alrededor de un 23% en basE91 y exactamente un 25% en Base85; aquí, 100 000 bytes aleatorios se convirtieron en 122 976 caracteres, frente a 125 000 en Ascii85. Los datos con largas series de bytes cero se reducen más, hasta un 14% de sobrecarga.

¿Por qué Base91 no se usa más?

No tiene RFC, su salida contiene " y otros caracteres que hay que escapar en JSON, en la shell y en HTML, y sus grupos de bits variables lo hacen más lento y más difícil de implementar que Base64. Unos pocos puntos porcentuales de ahorro rara vez compensan.

¿Puedo decodificar Base91 generado por otra biblioteca?

Solo si usa el alfabeto y el orden de bits del basE91 de Henke, como hacen la mayoría. Algunas bibliotecas traen su propio alfabeto Base91; su salida se decodifica aquí sin error, pero da bytes incorrectos.