Zum Inhalt springen
🛠️ToolsShed

Base85 Encoder / Decoder

Codiere und dekodiere Text mit Base85 (ASCII85) und RFC-1924-Kodierung.

Über Base85

Base85 kodiert Binärdaten mit 85 druckbaren ASCII-Zeichen. ASCII85 wird in PDF und PostScript verwendet. RFC 1924 verwendet einen anderen Zeichensatz.

Über dieses Tool

Base85 ist ein Binär-zu-Text-Kodierungssystem, das Rohdaten in lesbaren ASCII-Text konvertiert und sich ideal für die Übertragung binärer Informationen über reine Textkanäle eignet. Im Gegensatz zu Base64, das Daten um 33% erweitert, ist Base85 viel speichereffizienter und fügt nur etwa 25% zur Dateigröße hinzu—ein wesentlicher Vorteil bei der Verarbeitung großer Nutzlasten wie Bildern oder Dokumentanhängen.

Um diesen Encoder zu verwenden, wählen Sie einfach Ihre Kodierungsvariante (ASCII85 ist der Adobe-Standard für PDFs und PostScript; RFC 1924 ist eine netzwerkgestützte Alternative), und wählen Sie dann den Kodierungs- oder Dekodierungsmodus. Fügen Sie Ihren Text oder Ihre kodierten Daten ein, klicken Sie die Schaltfläche, und das Ergebnis wird mit einem Größenvergleich angezeigt, der genau zeigt, wie viel Platz die kodierte Version benötigt.

Base85 glänzt in spezialisierten Kontexten, in denen Effizienz und Textsicherheit gleichermaßen wichtig sind: PDFs mit eingebetteten Schriftarten, PostScript-Grafiken in Druckarbeitsabläufen oder Netzwerkprotokolle, die kompakte Darstellungen von Binärdaten benötigen. Während Base64 universeller unterstützt wird, ist Base85 die Standardwahl, wenn Sie die Ausgabegröße minimieren möchten, ohne die Portabilität zu beeinträchtigen.

Häufig gestellte Fragen

Code-Implementierung

import struct

def encode_ascii85(data: bytes) -> str:
    result = []
    for i in range(0, len(data), 4):
        chunk = data[i:i+4]
        padded = chunk.ljust(4, b'\x00')
        n = struct.unpack('>I', padded)[0]
        if n == 0 and len(chunk) == 4:
            result.append('z')
        else:
            chars = []
            for _ in range(5):
                chars.append(chr(n % 85 + 33))
                n //= 85
            result.extend(reversed(chars[:len(chunk)+1]))
    return '<~' + ''.join(result) + '~>'

def decode_ascii85(s: str) -> bytes:
    s = s.strip()
    if s.startswith('<~') and s.endswith('~>'):
        s = s[2:-2]
    result = bytearray()
    i = 0
    while i < len(s):
        if s[i] == 'z':
            result.extend(b'\x00' * 4); i += 1
        else:
            chunk = s[i:i+5]
            n = sum((ord(c) - 33) * (85 ** (4 - j)) for j, c in enumerate(chunk))
            result.extend(struct.pack('>I', n)[:len(chunk)-1])
            i += 5
    return bytes(result)

text = "Hello, World!"
encoded = encode_ascii85(text.encode())
print("Encoded:", encoded)
print("Decoded:", decode_ascii85(encoded).decode())

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.