Mode d’emploi
- Choisissez Encoder pour transformer du texte ou des octets en Ascii85, ou Décoder pour reconvertir de l’Ascii85 en données.
- Activez l’option « Délimiteurs <~ ~> » si la sortie est destinée à PostScript ou doit correspondre à Python a85encode avec adobe=True.
- Réglez éventuellement l’option « Retour à la ligne » pour découper une longue sortie en plusieurs lignes.
- Saisissez, collez ou ouvrez un fichier, puis copiez ou téléchargez le résultat. Au décodage, les délimiteurs, les espaces et les sauts de ligne sont ignorés.
Qu’est-ce qu’Ascii85 ?
Ascii85 lit l’entrée par groupes de 4 octets, traite chaque groupe comme un nombre de 32 bits et l’écrit sous la forme de 5 chiffres en base 85. Ces chiffres sont les 85 caractères ASCII consécutifs allant de ! (code 33) à u (code 117) : chaque caractère correspond simplement à la valeur du chiffre plus 33. La sortie est 25 % plus grande que l’entrée, contre 33 % pour Base64.
Le format a d’abord été utilisé par l’utilitaire Unix btoa. Adobe l’a adopté comme encodage ASCII base 85 de PostScript Level 2 et du PDF, où il permet de transporter des données binaires, comme des images et des polices, dans un simple fichier texte. Python le propose sous la forme de base64.a85encode(), et Go avec le paquet encoding/ascii85.
Le raccourci z et les délimiteurs Adobe
Un groupe de quatre octets nuls s’écrirait normalement avec cinq points d’exclamation. Ascii85 l’écrit plutôt avec un seul z, ce qui raccourcit les suites de données vides. Le raccourci ne s’applique qu’aux groupes complets. Lorsque la longueur de l’entrée n’est pas un multiple de 4, le dernier groupe de n octets devient n + 1 caractères et n’est jamais abrégé.
PostScript délimite une chaîne Ascii85 par <~ au début et ~> à la fin. Dans un flux PDF doté du filtre ASCII85Decode, seul le ~> final est utilisé, comme marqueur de fin de données. Le décodeur de cette page retire l’un ou l’autre délimiteur s’il est présent et ignore les espaces : vous pouvez donc coller directement les données d’un flux issu d’un fichier PDF ou PostScript.
Ascii85 dans le 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)
Spécifications
| Alphabet | ASCII 33 (!) à 117 (u), plus z |
|---|---|
| Taille de sortie | 5 caractères pour 4 octets (125 %) |
| Remplissage | Aucun, délimiteurs <~ ~> facultatifs |
| Norme | Adobe PostScript et PDF |
| Sensible à la casse | Oui |
Exemples
| Entrée (UTF-8) | Sortie |
|---|---|
Hello, World! | 87cURD_*#4DfTZ)+T |
Base64.is | 6=FqH2Dd%#Er |
你好 | jLq5JV7c |
Questions fréquentes
Quelle est la différence entre Ascii85 et Base85 ?
Pourquoi ma sortie contient-elle la lettre z ?
z représente quatre octets nuls formant un groupe complet. Les décodeurs le développent automatiquement : les données restent inchangées.Ai-je besoin des délimiteurs Adobe ?
Seulement si le programme qui lit les données les attend, par exemple un interpréteur PostScript ou Python a85decode avec adobe=True. De nombreux outils acceptent l’Ascii85 sans délimiteurs. Pour décoder ici, ils sont facultatifs.
Puis-je décoder un flux ASCII85 extrait d’un PDF ?
Oui. Collez les données du flux et choisissez la sortie Hexa, ou téléchargez le résultat. Si les filtres du flux mentionnent FlateDecode après ASCII85Decode, les octets décodés sont encore compressés avec zlib et nécessitent une seconde étape.
Pourquoi une erreur de caractère non valide s’affiche-t-elle ?
! à u, plus z entre les groupes. L’abréviation y pour quatre espaces, utilisée par certaines versions de btoa et par Python avec foldspaces=True, ne fait pas partie du format Adobe et est refusée.