Zo gebruik je het
- Kies Coderen om tekst of bytes naar Ascii85 om te zetten, of Decoderen om Ascii85 terug te zetten naar gegevens.
- Zet de optie Begrenzers aan als de uitvoer in PostScript terechtkomt of moet overeenkomen met Python a85encode met adobe=True.
- Stel desgewenst een Regelafbreking in, zodat lange uitvoer over meerdere regels wordt verdeeld.
- Typ of plak je invoer of gebruik Bestand openen, en kopieer of download daarna het resultaat. Bij het decoderen worden begrenzers, spaties en regeleinden genegeerd.
Wat is Ascii85?
Ascii85 leest de invoer per 4 bytes, behandelt elke groep als een 32-bitsgetal en schrijft die als 5 cijfers in grondtal 85. De cijfers zijn de 85 opeenvolgende ASCII-tekens van ! (code 33) tot u (code 117): elk teken is gewoon de cijferwaarde plus 33. De uitvoer is 25% groter dan de invoer, tegenover 33% bij Base64.
Het formaat werd voor het eerst gebruikt door het Unix-programma btoa. Adobe nam het over als de ASCII-base-85-codering van PostScript Level 2 en PDF, waar binaire gegevens zoals afbeeldingen en lettertypen er in een gewoon tekstbestand mee kunnen worden meegestuurd. Python biedt het aan als base64.a85encode() en Go als het pakket encoding/ascii85.
De z-afkorting en de Adobe-begrenzers
Een groep van vier nulbytes zou normaal als vijf uitroeptekens worden geschreven. Ascii85 schrijft die in plaats daarvan als één z, zodat reeksen lege gegevens kort blijven. De afkorting geldt alleen voor volledige groepen. Als de invoerlengte geen veelvoud van 4 is, wordt de laatste groep van n bytes n + 1 tekens en nooit afgekort.
PostScript markeert een Ascii85-string met <~ aan het begin en ~> aan het eind. In een PDF-stream met het filter ASCII85Decode wordt alleen de afsluitende ~> gebruikt, als markering voor het einde van de gegevens. De decoder op deze pagina verwijdert beide begrenzers als ze aanwezig zijn en negeert witruimte, zodat je streamgegevens uit een PDF- of PostScript-bestand direct kunt plakken.
Ascii85 in 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)
Specificatie
| Alfabet | ASCII 33 (!) tot 117 (u), plus z |
|---|---|
| Uitvoergrootte | 5 tekens per 4 bytes (125%) |
| Opvulling | Geen, optionele begrenzers <~ ~> |
| Standaard | Adobe PostScript en PDF |
| Hoofdlettergevoelig | Ja |
Voorbeelden
| Invoer (UTF-8) | Uitvoer |
|---|---|
Hello, World! | 87cURD_*#4DfTZ)+T |
Base64.is | 6=FqH2Dd%#Er |
你好 | jLq5JV7c |
Veelgestelde vragen
Wat is het verschil tussen Ascii85 en Base85?
Waarom bevat mijn uitvoer de letter z?
z staat voor vier nulbytes in een volledige groep. Decoders zetten die automatisch weer om, dus de gegevens blijven ongewijzigd.Heb ik de Adobe-begrenzers nodig?
Alleen als het programma dat de gegevens leest ze verwacht, bijvoorbeeld een PostScript-interpreter of Python a85decode met adobe=True. Veel tools accepteren Ascii85 ook zonder. Bij het decoderen op deze pagina zijn begrenzers optioneel.
Kan ik een ASCII85-stream uit een PDF decoderen?
Ja. Plak de streamgegevens en zet Uitvoer als op Hex, of download het resultaat. Staat FlateDecode na ASCII85Decode in de filters van de stream, dan zijn de gedecodeerde bytes nog met zlib gecomprimeerd en is er een tweede stap nodig.
Waarom krijg ik een foutmelding over een ongeldig teken?
! tot u toe, plus z tussen groepen. De afkorting y voor vier spaties, die sommige btoa-versies en Python met foldspaces=True gebruiken, hoort niet bij het Adobe-formaat en wordt geweigerd.