Ascii85-Encoder und -Decoder

Wandeln Sie Text, Hex-Bytes oder Dateien in Ascii85 um, die in PostScript und PDF verwendete Base85-Variante, und wieder zurück. Fügen Sie Adobe-Begrenzer hinzu oder brechen Sie lange Ausgaben in Zeilen um.

Läuft vollständig in Ihrem Browser. Es wird nichts hochgeladen.

Anleitung

  1. Wählen Sie „Kodieren“, um Text oder Bytes in Ascii85 umzuwandeln, oder „Dekodieren“, um Ascii85 wieder in Daten zurückzuverwandeln.
  2. Aktivieren Sie „Begrenzer <~ ~>“, wenn die Ausgabe in PostScript eingebettet wird oder mit Python a85encode mit adobe=True übereinstimmen muss.
  3. Legen Sie bei Bedarf einen „Zeilenumbruch“ fest, damit lange Ausgaben in Zeilen aufgeteilt werden.
  4. Geben Sie Text ein, fügen Sie ihn ein oder öffnen Sie eine Datei, und kopieren Sie dann das Ergebnis oder laden Sie es herunter. Beim Dekodieren werden Begrenzer, Leerzeichen und Zeilenumbrüche ignoriert.

Was ist Ascii85?

Ascii85 liest die Eingabe in Gruppen von 4 Bytes, behandelt jede Gruppe als 32-Bit-Zahl und schreibt sie als 5 Ziffern zur Basis 85. Die Ziffern sind die 85 aufeinanderfolgenden ASCII-Zeichen von ! (Code 33) bis u (Code 117): Jedes Zeichen ist einfach der Ziffernwert plus 33. Die Ausgabe ist 25 % größer als die Eingabe, gegenüber 33 % bei Base64.

Das Format wurde zuerst vom Unix-Programm btoa verwendet. Adobe übernahm es als ASCII-Base-85-Kodierung für PostScript Level 2 und PDF, wo es Binärdaten wie Bilder und Schriften innerhalb einer reinen Textdatei transportiert. Python bietet es als base64.a85encode() an, Go als Paket encoding/ascii85.

Die z-Abkürzung und die Adobe-Begrenzer

Eine Gruppe aus vier Nullbytes würde normalerweise als fünf Ausrufezeichen geschrieben. Ascii85 schreibt sie stattdessen als einzelnes z, wodurch Folgen leerer Daten kurz bleiben. Die Abkürzung gilt nur für vollständige Gruppen. Ist die Eingabelänge kein Vielfaches von 4, wird die letzte Gruppe aus n Bytes zu n + 1 Zeichen und nie abgekürzt.

PostScript kennzeichnet einen Ascii85-String mit <~ am Anfang und ~> am Ende. In einem PDF-Stream mit dem Filter ASCII85Decode wird nur das schließende ~> verwendet, und zwar als Markierung für das Datenende. Der Decoder auf dieser Seite entfernt beide Begrenzer, sofern vorhanden, und ignoriert Leerraum, sodass Sie Stream-Daten aus einer PDF- oder PostScript-Datei direkt einfügen können.

Ascii85 im Code

# Python 3.4+
import base64
base64.a85encode(b'hello')                      # b'BOu!rDZ'
base64.a85encode(b'hello', adobe=True)          # b'<~BOu!rDZ~>'
base64.a85decode(b'<~BOu!rDZ~>', adobe=True)    # b'hello'

// Go
import "encoding/ascii85"
dst := make([]byte, ascii85.MaxEncodedLen(len(src)))
n := ascii85.Encode(dst, src)

Spezifikation

AlphabetASCII 33 (!) bis 117 (u), plus z
Ausgabegröße5 Zeichen pro 4 Bytes (125 %)
AuffüllungKeine, optionale Begrenzer <~ ~>
StandardAdobe PostScript und PDF
Groß-/Kleinschreibung relevantJa

Beispiele

Eingabe (UTF-8)Ausgabe
Hello, World!87cURD_*#4DfTZ)+T
Base64.is6=FqH2Dd%#Er
你好jLq5JV7c

Häufig gestellte Fragen

Was ist der Unterschied zwischen Ascii85 und Base85?
Beide kodieren 4 Bytes als 5 Zeichen, aber mit unterschiedlichen Alphabeten. Ascii85 verwendet den Bereich von ! bis u und kennt die Abkürzung z. Die Seite Base85 verwendet das RFC-1924-Alphabet von Git und Python b85encode, und Z85 ist die ZeroMQ-Variante.
Warum enthält meine Ausgabe den Buchstaben z?
Jedes z steht für vier Nullbytes in einer vollständigen Gruppe. Decoder erweitern es automatisch wieder, die Daten bleiben also unverändert.
Benötige ich die Adobe-Begrenzer?

Nur wenn das Programm, das die Daten liest, sie erwartet, zum Beispiel ein PostScript-Interpreter oder Python a85decode mit adobe=True. Viele Tools akzeptieren Ascii85 auch ohne Begrenzer. Beim Dekodieren auf dieser Seite sind sie optional.

Kann ich einen ASCII85-Stream aus einer PDF-Datei dekodieren?

Ja. Fügen Sie die Stream-Daten ein und wählen Sie die Hex-Ausgabe oder laden Sie das Ergebnis herunter. Führt der Stream in seinen Filtern FlateDecode nach ASCII85Decode auf, sind die dekodierten Bytes noch zlib-komprimiert und erfordern einen zweiten Schritt.

Warum erhalte ich einen Fehler wegen eines ungültigen Zeichens?
Ascii85 erlaubt nur die Zeichen von ! bis u sowie z zwischen Gruppen. Die Abkürzung y für vier Leerzeichen, die einige btoa-Versionen und Python mit foldspaces=True verwenden, gehört nicht zum Adobe-Format und wird abgelehnt.