Come si usa
- Scegli Codifica per trasformare testo o byte in Ascii85, oppure Decodifica per riportare Ascii85 ai dati originali.
- Attiva l’opzione Delimitatori <~ ~> (i delimitatori Adobe) se l’output è destinato a PostScript o deve coincidere con Python a85encode con adobe=True.
- Se vuoi, imposta A capo per suddividere in righe l’output lungo.
- Digita, incolla o apri un file, poi copia o scarica il risultato. In decodifica, delimitatori, spazi e interruzioni di riga vengono ignorati.
Che cos’è Ascii85?
Ascii85 legge l’input 4 byte alla volta, tratta ogni gruppo come un numero a 32 bit e lo scrive come 5 cifre in base 85. Le cifre sono gli 85 caratteri ASCII consecutivi da ! (codice 33) a u (codice 117): ogni carattere è semplicemente il valore della cifra più 33. L’output è il 25% più grande dell’input, contro il 33% di Base64.
Il formato è stato usato per la prima volta dall’utility Unix btoa. Adobe l’ha adottato come codifica ASCII base-85 di PostScript Level 2 e del PDF, dove permette di trasportare dati binari come immagini e font all’interno di un normale file di testo. Python lo offre come base64.a85encode() e Go con il pacchetto encoding/ascii85.
La scorciatoia z e i delimitatori Adobe
Un gruppo di quattro byte zero verrebbe normalmente scritto come cinque punti esclamativi. Ascii85 lo scrive invece come una singola z, così le sequenze di dati vuoti restano brevi. La scorciatoia si applica solo ai gruppi completi. Quando la lunghezza dell’input non è un multiplo di 4, il gruppo finale di n byte diventa n + 1 caratteri e non viene mai abbreviato.
PostScript delimita una stringa Ascii85 con <~ all’inizio e ~> alla fine. In uno stream PDF con il filtro ASCII85Decode si usa solo la chiusura ~>, come marcatore di fine dati. Il decodificatore di questa pagina rimuove entrambi i delimitatori, se presenti, e ignora gli spazi bianchi, quindi puoi incollare direttamente i dati di uno stream preso da un file PDF o PostScript.
Ascii85 nel codice
# 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)
Specifiche
| Alfabeto | Da ASCII 33 (!) a 117 (u), più z |
|---|---|
| Dimensione dell’output | 5 caratteri ogni 4 byte (125%) |
| Padding | Nessuno, delimitatori <~ ~> facoltativi |
| Standard | Adobe PostScript e PDF |
| Distingue maiuscole/minuscole | Sì |
Esempi
| Input (UTF-8) | Output |
|---|---|
Hello, World! | 87cURD_*#4DfTZ)+T |
Base64.is | 6=FqH2Dd%#Er |
你好 | jLq5JV7c |
Domande frequenti
Qual è la differenza tra Ascii85 e Base85?
Perché il mio output contiene la lettera z?
z rappresenta quattro byte zero in un gruppo completo. I decodificatori la espandono automaticamente, quindi i dati restano invariati.Mi servono i delimitatori Adobe?
Solo se il programma che legge i dati se li aspetta, per esempio un interprete PostScript o Python a85decode con adobe=True. Molti strumenti accettano Ascii85 anche senza. Per decodificare qui, i delimitatori sono facoltativi.
Posso decodificare uno stream ASCII85 di un PDF?
Sì. Incolla i dati dello stream e scegli l’output Esadecimale, oppure scarica il risultato. Se tra i filtri dello stream FlateDecode compare dopo ASCII85Decode, i byte decodificati sono ancora compressi con zlib e serve un secondo passaggio.
Perché ricevo un errore di carattere non valido?
! a u, più z tra un gruppo e l’altro. L’abbreviazione y per quattro spazi, usata da alcune versioni di btoa e da Python con foldspaces=True, non fa parte del formato Adobe e viene rifiutata.