Anleitung
- Wählen Sie „Kodieren“, um Text oder Bytes in Ascii85 umzuwandeln, oder „Dekodieren“, um Ascii85 wieder in Daten zurückzuverwandeln.
- Aktivieren Sie „Begrenzer <~ ~>“, wenn die Ausgabe in PostScript eingebettet wird oder mit Python a85encode mit adobe=True übereinstimmen muss.
- Legen Sie bei Bedarf einen „Zeilenumbruch“ fest, damit lange Ausgaben in Zeilen aufgeteilt werden.
- 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
| Alphabet | ASCII 33 (!) bis 117 (u), plus z |
|---|---|
| Ausgabegröße | 5 Zeichen pro 4 Bytes (125 %) |
| Auffüllung | Keine, optionale Begrenzer <~ ~> |
| Standard | Adobe PostScript und PDF |
| Groß-/Kleinschreibung relevant | Ja |
Beispiele
| Eingabe (UTF-8) | Ausgabe |
|---|---|
Hello, World! | 87cURD_*#4DfTZ)+T |
Base64.is | 6=FqH2Dd%#Er |
你好 | jLq5JV7c |
Häufig gestellte Fragen
Was ist der Unterschied zwischen Ascii85 und Base85?
Warum enthält meine Ausgabe den Buchstaben z?
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?
! 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.