Ascii85-koder og -dekoder

Konvertér tekst, hexbytes eller filer til Ascii85, den Base85-variant, der bruges i PostScript og PDF, og tilbage. Tilføj Adobe-afgrænsere, eller del langt output op i linjer.

Kører udelukkende i din browser. Intet bliver uploadet.

Sådan bruger du værktøjet

  1. Vælg Kod for at omdanne tekst eller bytes til Ascii85, eller Afkod for at omdanne Ascii85 tilbage til data.
  2. Slå Afgrænsere til, hvis outputtet skal bruges i PostScript eller skal svare til Python a85encode med adobe=True.
  3. Vælg eventuelt en værdi under Linjeombrydning, så langt output deles op i linjer.
  4. Skriv eller indsæt dit input, eller åbn en fil, og kopiér eller download derefter resultatet. Ved afkodning ignoreres afgrænsere, mellemrum og linjeskift.

Hvad er Ascii85?

Ascii85 læser inputtet 4 bytes ad gangen, behandler hver gruppe som et 32-bit-tal og skriver det som 5 cifre i base 85. Cifrene er de 85 på hinanden følgende ASCII-tegn fra ! (kode 33) til u (kode 117): Hvert tegn er simpelthen cifferværdien plus 33. Outputtet er 25 % større end inputtet mod 33 % for Base64.

Formatet blev først brugt af Unix-værktøjet btoa. Adobe indførte det som ASCII-base-85-kodningen i PostScript Level 2 og PDF, hvor det gør det muligt at transportere binære data som billeder og skrifttyper inde i en almindelig tekstfil. Python tilbyder det som base64.a85encode() og Go som pakken encoding/ascii85.

Genvejen z og Adobe-afgrænserne

En gruppe på fire nulbytes ville normalt blive skrevet som fem udråbstegn. Ascii85 skriver den i stedet som et enkelt z, hvilket holder sekvenser af tomme data korte. Genvejen gælder kun for hele grupper. Når inputlængden ikke er et multiplum af 4, bliver den sidste gruppe på n bytes til n + 1 tegn og forkortes aldrig.

PostScript markerer en Ascii85-streng med <~ i begyndelsen og ~> til sidst. I en PDF-stream med filteret ASCII85Decode bruges kun den afsluttende ~> som markering af, at dataene slutter. Dekoderen her fjerner begge afgrænsere, hvis de findes, og ignorerer blanktegn, så du kan indsætte streamdata fra en PDF- eller PostScript-fil direkte.

Ascii85 i kode

# 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)

Specifikation

AlfabetASCII 33 (!) til 117 (u) plus z
Outputstørrelse5 tegn pr. 4 bytes (125 %)
UdfyldningIngen, valgfri afgrænsere <~ ~>
StandardAdobe PostScript og PDF
Skelner mellem store og små bogstaverJa

Eksempler

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

Ofte stillede spørgsmål

Hvad er forskellen på Ascii85 og Base85?
Begge koder 4 bytes som 5 tegn, men med forskellige alfabeter. Ascii85 bruger intervallet fra ! til u og har genvejen z. Siden Base85 bruger RFC 1924-alfabetet fra Git og Python b85encode, og Z85 er ZeroMQ-varianten.
Hvorfor indeholder mit output bogstavet z?
Hvert z står for fire nulbytes i en hel gruppe. Dekodere udvider det automatisk igen, så dataene er uændrede.
Har jeg brug for Adobe-afgrænserne?

Kun hvis det program, der læser dataene, forventer dem, for eksempel en PostScript-fortolker eller Python a85decode med adobe=True. Mange værktøjer accepterer Ascii85 uden dem. Ved afkodning her er afgrænserne valgfrie.

Kan jeg afkode en ASCII85-stream fra en PDF?

Ja. Indsæt streamdataene, og vælg Hex under Output som, eller download resultatet. Hvis streamen angiver FlateDecode efter ASCII85Decode i sine filtre, er de afkodede bytes stadig zlib-komprimerede og kræver et ekstra trin.

Hvorfor får jeg en fejl om et ugyldigt tegn?
Ascii85 tillader kun tegnene fra ! til u samt z mellem grupper. Forkortelsen y for fire mellemrum, som nogle btoa-versioner og Python med foldspaces=True bruger, er ikke en del af Adobe-formatet og afvises.