Encodeur et décodeur Ascii85

Convertissez du texte, des octets hexadécimaux ou des fichiers en Ascii85, la variante de Base85 utilisée dans PostScript et PDF, et inversement. Ajoutez les délimiteurs Adobe ou répartissez une longue sortie sur plusieurs lignes.

Fonctionne entièrement dans votre navigateur. Aucune donnée n’est envoyée.

Mode d’emploi

  1. Choisissez Encoder pour transformer du texte ou des octets en Ascii85, ou Décoder pour reconvertir de l’Ascii85 en données.
  2. Activez l’option « Délimiteurs <~ ~> » si la sortie est destinée à PostScript ou doit correspondre à Python a85encode avec adobe=True.
  3. Réglez éventuellement l’option « Retour à la ligne » pour découper une longue sortie en plusieurs lignes.
  4. 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

AlphabetASCII 33 (!) à 117 (u), plus z
Taille de sortie5 caractères pour 4 octets (125 %)
RemplissageAucun, délimiteurs <~ ~> facultatifs
NormeAdobe PostScript et PDF
Sensible à la casseOui

Exemples

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

Questions fréquentes

Quelle est la différence entre Ascii85 et Base85 ?
Tous deux encodent 4 octets en 5 caractères, mais avec des alphabets différents. Ascii85 utilise la plage allant de ! à u et dispose du raccourci z. La page Base85 utilise l’alphabet RFC 1924 de Git et de Python b85encode, et Z85 est la variante de ZeroMQ.
Pourquoi ma sortie contient-elle la lettre z ?
Chaque 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 ?
Ascii85 n’autorise que les caractères de ! à 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.