Så använder du verktyget
- Välj Koda för att göra om text eller byte till Ascii85, eller Avkoda för att göra om Ascii85 till data igen.
- Slå på Avgränsare <~ ~> om utdatan ska användas i PostScript eller måste stämma med Python a85encode med adobe=True.
- Ställ vid behov in Radbrytning så att lång utdata delas upp i rader.
- Skriv, klistra in eller öppna en fil, och kopiera eller ladda ned resultatet. Vid avkodning ignoreras avgränsare, mellanslag och radbrytningar.
Vad är Ascii85?
Ascii85 läser indatan 4 byte i taget, behandlar varje grupp som ett 32-bitarstal och skriver det som 5 siffror i bas 85. Siffrorna är de 85 på varandra följande ASCII-tecknen från ! (kod 33) till u (kod 117): varje tecken är helt enkelt siffrans värde plus 33. Utdatan blir 25 % större än indatan, mot 33 % för Base64.
Formatet användes först av Unix-verktyget btoa. Adobe tog upp det som ASCII-kodningen med bas 85 i PostScript Level 2 och PDF, där den gör att binärdata som bilder och typsnitt kan följa med i en vanlig textfil. Python erbjuder kodningen som base64.a85encode() och Go som paketet encoding/ascii85.
Förkortningen z och Adobes avgränsare
En grupp med fyra nollbyte skulle normalt skrivas som fem utropstecken. Ascii85 skriver den i stället som ett enda z, vilket håller långa följder av tom data korta. Förkortningen gäller bara hela grupper. När indatans längd inte är en multipel av 4 blir den sista gruppen på n byte till n + 1 tecken och förkortas aldrig.
PostScript markerar en Ascii85-sträng med <~ i början och ~> i slutet. I en PDF-ström med filtret ASCII85Decode används bara den avslutande ~>, som markering för slutet på datan. Avkodaren här tar bort avgränsarna när de finns och ignorerar blanktecken, så du kan klistra in strömdata från en PDF- eller PostScript-fil direkt.
Ascii85 i programkod
# Python 3.4+
import base64
base64.a85encode(b'hello') # ger b'BOu!rDZ'
base64.a85encode(b'hello', adobe=True) # ger b'<~BOu!rDZ~>'
base64.a85decode(b'<~BOu!rDZ~>', adobe=True) # ger b'hello'
// Go
import "encoding/ascii85"
dst := make([]byte, ascii85.MaxEncodedLen(len(src)))
n := ascii85.Encode(dst, src)
Specifikation
| Alfabet | ASCII 33 (!) till 117 (u), plus z |
|---|---|
| Utdatastorlek | 5 tecken per 4 byte (125 %) |
| Utfyllnad | Ingen, valfria avgränsare <~ ~> |
| Standard | Adobe PostScript och PDF |
| Skiftlägeskänslig | Ja |
Exempel
| Indata (UTF-8) | Utdata |
|---|---|
Hello, World! | 87cURD_*#4DfTZ)+T |
Base64.is | 6=FqH2Dd%#Er |
你好 | jLq5JV7c |
Vanliga frågor
Vad är skillnaden mellan Ascii85 och Base85?
Varför innehåller min utdata bokstaven z?
z står för fyra nollbyte i en hel grupp. Avkodare expanderar den automatiskt igen, så datan är oförändrad.Behöver jag Adobes avgränsare?
Bara om programmet som läser datan förväntar sig dem, till exempel en PostScript-tolk eller Python a85decode med adobe=True. Många verktyg accepterar Ascii85 utan dem. När du avkodar här är avgränsarna valfria.
Kan jag avkoda en ASCII85-ström från en PDF?
Ja. Klistra in strömdatan och välj Hex som utdata, eller ladda ned resultatet. Om strömmen anger FlateDecode efter ASCII85Decode bland sina filter är de avkodade bytena fortfarande zlib-komprimerade och behöver ett andra steg.
Varför får jag ett fel om ogiltigt tecken?
! till u, plus z mellan grupper. Förkortningen y för fyra mellanslag, som vissa versioner av btoa och Python med foldspaces=True använder, ingår inte i Adobes format och avvisas.