Comment encoder et décoder de l’Ascii85
- Saisissez ou collez du texte dans Entrée · Texte. L’Ascii85 apparaît dans Sortie · Ascii85 (Adobe).
- Sous la sortie, cochez Ajouter les délimiteurs <~ ~> pour l’encadrement PostScript/PDF, et décochez z pour les groupes nuls si votre décodeur ne gère pas ce raccourci.
- Pour utiliser un autre alphabet Base85, réglez Vers sur Base85 (Git / Python b85), Z85 (ZeroMQ) ou RFC 1924 (IPv6 Base85).
- Pour décoder, cliquez sur Ascii85 (Adobe) → Texte dans le sélecteur de sens. Le décodeur accepte les délimiteurs
<~ ~>,z,yet tout espace blanc : les données coupées en lignes issues d’un fichier se collent directement. - Pour un résultat binaire, réglez Vers sur Hex ou cliquez sur Enregistrer les octets.
Comment fonctionne l’Ascii85
L’Ascii85 prend les octets 4 par 4, les lit comme un seul nombre 32 bits big-endian et l’écrit sous forme de 5 chiffres en base 85. Chaque chiffre est un caractère de ! (valeur 0) à u (valeur 84). Cinq caractères pour quatre octets, c’est un surcoût de 25 %, contre 33 % pour le Base64.
L’exemple classique est Man (avec l’espace final) : les octets 4d 61 6e 20 deviennent 9jqo^. Quand le dernier groupe est incomplet, l’encodeur le complète avec des octets nuls et n’écrit que n + 1 caractères pour n octets : Hello (5 octets) devient donc 87cURDZ, cinq caractères pour Hell et deux pour o.
Deux raccourcis abrègent des motifs fréquents. z remplace un groupe de quatre octets nuls, soit !!!!! en toutes lettres. y remplace quatre espaces dans la variante btoa. Ce décodeur lit les deux ; l’encodeur écrit z (désactivable), mais jamais y.
Comparaison des variantes de Base85
| Variante | Alphabet | Hello | Utilisation |
|---|---|---|---|
| Ascii85 (Adobe) | ! à u dans l’ordre ASCII | 87cURDZ | PostScript, PDF /ASCII85Decode |
| Base85 (Git / Python) | 0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~ | NM&qnZv | Patchs binaires Git, base64.b85encode de Python |
| Z85 | 0-9 a-z A-Z .-:+=^!/*?&<>()[]{}@%$# | nm=QNzV | Clés ZeroMQ et CurveZMQ, voir Z85 |
| RFC 1924 | Le même que Git | 4)+k&C#VzJ4br>0wv%Yp pour une adresse IPv6 | Adresses IPv6, pour plaisanter |
Les alphabets de Git et de la RFC 1924 sont identiques, mais la RFC 1924 traite une adresse entière de 16 octets comme un seul nombre de 128 bits au lieu de quatre groupes de 4 octets. Publiée le 1er avril 1996, la RFC 1924 propose d’écrire 1080::8:800:200c:417a sous la forme 4)+k&C#VzJ4br>0wv%Yp. Le convertisseur le reproduit avec De réglé sur Adresse IPv6 et Vers sur RFC 1924 (IPv6 Base85).
L’Ascii85 dans PDF et PostScript
PostScript Level 2 a introduit l’Ascii85 pour intégrer des données binaires, comme des images et des polices, dans un fichier texte. Les données sont encadrées par <~ … ~>. Dans un PDF, un flux avec /Filter /ASCII85Decode contient le même encodage, terminé par ~>. Le décodeur trouve ici le marqueur de fin avec ou sans le <~ d’ouverture.
L’Ascii85 est souvent le filtre extérieur d’une chaîne, par exemple /Filter [/ASCII85Decode /FlateDecode]. Décoder l’Ascii85 donne alors des octets compressés en zlib plutôt qu’un contenu lisible.
Git utilise le Base85 autrement. Dans un GIT binary patch, chaque ligne commence par un caractère de longueur (A–Z pour 1 à 26 octets, a–z pour 27 à 52), suivi du Base85 des données compressées en zlib. Retirez ce premier caractère de chaque ligne avant de décoder, puis décompressez le résultat.
Ascii85 et Base85 en Python
La bibliothèque standard propose les deux alphabets :
import base64
base64.a85encode(b"Hello") # b'87cURDZ'
base64.a85encode(b"Hello", adobe=True) # b'<~87cURDZ~>'
base64.a85encode(b" ", foldspaces=True) # b'y'
base64.b85encode(b"Hello") # b'NM&qnZv'
base64.a85decode(b"<~9jqo^~>", adobe=True) # b'Man '
a85decode a besoin de adobe=True pour accepter les délimiteurs. Voir la page Python pour d’autres recettes d’encodage.
Problèmes courants
"z" à la position … n'est autorisé qu'entre des groupes de 5 caractères. Unzapparaît à l’intérieur d’un groupe. Les données sont endommagées, ou ce n’est pas de l’Ascii85 ; Z85 et le Base85 de Git utilisentzcomme un chiffre ordinaire.le groupe qui commence à la position … est hors limites. Cinq caractères encodent une valeur supérieure à 2^32 − 1. Cela arrive quand du Base85 Git ou du Z85 est décodé comme de l’Ascii85 ; changez De.- Caractère inattendu comme
v,{ou|. Tout ce qui suitu, à part les raccourcisyetz, est hors de l’alphabet Ascii85 : encore un signe d’une autre variante. - La sortie a des octets nuls en trop à la fin. Votre encodeur a complété le dernier groupe et écrit les 5 caractères. L’Ascii85 écrit n + 1 caractères pour un dernier groupe de n octets.
FAQ
Quelle est la différence entre Base85 et Ascii85 ?
Base85 désigne le principe général : écrire 4 octets sous forme de 5 caractères pris dans un jeu de 85. Ascii85 est la version d’Adobe, avec les caractères ! à u, le raccourci z et les délimiteurs <~ ~>. Git, le b85encode de Python, Z85 et la RFC 1924 utilisent la même arithmétique avec d’autres alphabets.
Que signifie z en Ascii85 ?
Un seul z remplace quatre octets nuls, qui s’écriraient sinon !!!!!. Il n’est autorisé que là où commencerait un groupe complet de 5 caractères ; un z à l’intérieur d’un groupe est une erreur.
Comment décoder l'Ascii85 d'un PDF ?
Copiez les données du flux entre stream et endstream jusqu’à ~> inclus, et collez-les avec le sens réglé sur Ascii85 (Adobe) → Texte. Si le flux mentionne aussi /FlateDecode, le résultat est des données zlib ; réglez Vers sur Base64 et décompressez-les avec le décodeur gzip et zlib.
Base85 est-il meilleur que Base64 ?
Il est environ 6 % plus court : 25 % de surcoût contre 33 %. Mais selon la variante, ses alphabets contiennent des guillemets, des barres obliques inverses ou < et & : il faut donc l’échapper en JSON, en XML ou dans un shell, là où le Base64 n’en a pas besoin. Utilisez-le là où ces caractères ne posent pas de problème.