Datei hochladen
  1. base64hub
  2. Weitere Basen
  3. Base91

Base91-Encoder und -Decoder (basE91)

Geben Sie Text ein, um basE91 zu erhalten, die Kodierung, die Binärdaten in 91 druckbare ASCII-Zeichen packt. Bei Zufallsdaten ist sie etwa 8 % kürzer als Base64, um den Preis eines weniger freundlichen Alphabets.

Kostenlos ohne Anmeldung, ohne Limits Lokal kein Upload ~23 % Overhead bei Zufallsdaten Aktualisiert 27.10.2026
Eingabe 0Bytes 0 BAusgabe 0

Wird in Ihrem Browser verarbeitet. Diese Seite kann Ihre Daten nirgendwohin senden – woher wir das wissen

So kodieren und dekodieren Sie Base91

  1. Geben Sie Text in Eingabe · Text ein oder fügen Sie ihn ein. Die kodierte Zeichenkette erscheint in Ausgabe · basE91.
  2. Für Binärdaten stellen Sie Von auf Hex oder Base64 und fügen sie in dieser Form ein.
  3. Zum Dekodieren klicken Sie im Richtungsschalter auf basE91 → Text. Zeilenumbrüche in der Eingabe werden ignoriert; jedes andere Zeichen außerhalb des Alphabets stoppt das Dekodieren mit Angabe seiner Position.
  4. Mit Ausgabe kopieren oder Herunterladen übernehmen Sie das Ergebnis. Für dekodierte Binärdaten nutzen Sie Bytes speichern.

So funktioniert basE91

basE91 wurde von Joachim Henke veröffentlicht. Base64 bildet je 6 Bits auf ein Zeichen ab. basE91 sammelt die Eingabebits dagegen in einer Warteschlange und nimmt jeweils 13 Bits. Zwei Zeichen können 91 × 91 = 8281 Werte darstellen, etwas mehr als die 8192, die 13 Bits brauchen. Der überschüssige Platz dient einer Optimierung: Haben die nächsten 13 Bits einen Wert von 88 oder weniger, nimmt der Encoder stattdessen 14 Bits und schreibt trotzdem zwei Zeichen.

Dadurch hängt die Ausgabelänge vom Inhalt ab. Bei Zufallsdaten sind 14-Bit-Gruppen selten (unter 1,1 % der Gruppen), der Overhead liegt also nahe bei 16/13, etwa 23 %. Daten mit vielen Nullbits lassen sich besser packen: 1000 Nullbytes werden zu 1143 Zeichen, 14 % Overhead.

EingabebasE91Base64
testfPNKddGVzdA==
Hello>OwJh>ASGVsbG8=
Hello World!>OwJh>Io0Tv!8PESGVsbG8gV29ybGQh
4 NullbytesAAAAAAAAAAA==
1000 Zufallsbytesetwa 1230 Zeichen1336 Zeichen

Die variablen Gruppen haben eine Nebenwirkung: Es gibt keine feste Blockgröße, Sie können also nicht in der Mitte einer Zeichenkette mit dem Dekodieren beginnen oder sie an beliebigen Stellen teilen. Base64 lässt sich an jedem Vielfachen von 4 Zeichen teilen.

Das Alphabet und wo es Ärger macht

Das basE91-Alphabet besteht aus A–Z, a–z, 0–9 und diesen 29 Zeichen:

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

Es lässt Leerzeichen, ', - und \ weg. Leerzeichen und ' machen in Shells und Strings in Anführungszeichen Ärger, und \ ist fast überall ein Escape-Zeichen. Das doppelte Anführungszeichen ist aber dabei, ebenso <, > und &, daher muss basE91 in JSON, HTML oder XML maskiert werden, und die Escapes fressen einen Teil des Vorteils gegenüber Base64 auf. Am besten funktioniert es dort, wo beliebiges druckbares ASCII erlaubt ist, etwa in einer Textdatei, einem Shell-Argument in einfachen Anführungszeichen oder einem binärsicheren Protokollfeld.

Ein basE91-Encoder in Python

In der Standardbibliothek gibt es kein basE91. Henkes Algorithmus ist kurz genug, um ihn einzubauen:

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'

Er erzeugt für jede Eingabe dieselbe Ausgabe wie diese Seite. Mehr zum Umgang mit Bytes in Python finden Sie auf der Python-Seite.

Wann Base91 die richtige Wahl ist

Nehmen Sie basE91, wenn jedes Byte der Ausgabe zählt und der Kanal fast alles druckbare ASCII annimmt: kompakte Logs oder Textfelder mit harter Längenbegrenzung. Für alles, was in JSON, URLs, HTML oder E-Mails landet, ist Base64 sicherer und fast genauso kurz, und Ascii85 ist in PDF und PostScript standardisiert, wenn Sie 25 % Overhead mit festen Blöcken wollen.

Häufige Fragen

Welche Zeichen verwendet Base91?

Alle 95 druckbaren ASCII-Zeichen außer Leerzeichen, Apostroph ', Bindestrich - und Backslash \. Übrig bleiben Buchstaben, Ziffern und 29 Satzzeichen, darunter das doppelte Anführungszeichen.

Ist Base91 kleiner als Base85?

Etwas. Zufallsdaten wachsen in basE91 um etwa 23 % und in Base85 um genau 25 %; 100.000 Zufallsbytes ergaben hier 122.976 Zeichen gegenüber 125.000 in Ascii85. Daten mit langen Folgen von Nullbytes schrumpfen weiter, bis auf etwa 14 % Overhead.

Warum ist Base91 nicht weiter verbreitet?

Es gibt keinen RFC, die Ausgabe enthält " und andere Zeichen, die in JSON, Shells und HTML maskiert werden müssen, und die variablen Bitgruppen machen es langsamer und schwerer zu implementieren als Base64. Die paar Prozent Ersparnis wiegen das selten auf.

Kann ich Base91 aus einer anderen Bibliothek dekodieren?

Nur wenn sie Henkes basE91-Alphabet und seine Bitreihenfolge verwendet, was die meisten tun. Einige Bibliotheken bringen eigene Base91-Alphabete mit; deren Ausgabe wird hier ohne Fehler dekodiert, liefert aber falsche Bytes.