Comment encoder et décoder en xxencode
Pour encoder :
- Saisissez ou collez du texte dans Entrée · Texte. Le bloc xxencodé s’affiche dans Sortie · xxencode.
- Réglez le Nom du fichier sous la sortie sur le nom que doit recevoir le destinataire ; par défaut, c’est
data.bin. - Décochez lignes begin/end si vous ne voulez que les lignes de données.
Pour décoder :
- Cliquez sur xxencode → Texte dans le sélecteur de sens.
- Collez le bloc. Tout texte précédant la ligne
begin, comme un en-tête d’e-mail ou une note, est ignoré. - Lisez le résultat, réglez Vers sur Hex pour un contenu binaire, ou cliquez sur Enregistrer les octets pour le télécharger sous le nom indiqué dans la ligne
begin.
Pourquoi xxencode existe
L’alphabet d’uuencode comprend tous les caractères de l’espace (ou de l’accent grave) à _, dont [, ], ^, \ et !. Ces caractères posaient problème sur les passerelles de messagerie entre systèmes ASCII et EBCDIC, notamment les mainframes IBM et le réseau BITNET, car ils n’avaient pas d’équivalent EBCDIC unique. Les fichiers arrivaient avec des caractères échangés et se décodaient en charabia.
Xxencode garde la structure d’uuencode et remplace l’alphabet par 64 caractères qui se convertissent de façon fiable : +, -, 0–9, A–Z et a–z. La valeur 0 est +, la valeur 1 est -, les chiffres commencent à la valeur 2, et le z minuscule vaut 63.
Uuencode et xxencode côte à côte
Les mêmes entrées dans les deux formats, avec le nom de fichier hello.txt :
| Entrée | Ligne de données uuencode | Ligne de données xxencode |
|---|---|---|
Cat | #0V%T | 1Eq3o |
Hello, world | ,2&5L;&\L('=O<FQD | AG4JgP4wg65RjQalY |
| 4 octets nuls | $```````` | 2++++++++ |
Le premier caractère de chaque ligne est le nombre d’octets dans l’alphabet propre au format : 3 s’écrit # en uuencode et 1 en xxencode, 12 s’écrit , et A, 4 s’écrit $ et 2. Une ligne pleine de 45 octets commence par M en uuencode et par h en xxencode.
Un fichier xxencodé complet ressemble à ceci, ici pour The quick brown fox jumps over the lazy dog. 0123456789 enregistré sous fox.txt :
begin 644 fox.txt
hJ4VZ653pOKBf647mPrRi64NjS0-eRKpkQm-jRaJm65FcNG-gMLdt64FjNmsU
8A12mAnEpBXQsCE++
+
end
La taille est la même qu’en uuencode : 4 caractères pour 3 octets, plus un caractère de longueur et un saut de ligne par ligne, soit environ 38 % de plus que l’entrée.
Xxencode en Python
Python n’a pas de xxencode, mais binascii.b2a_uu produit les mêmes valeurs de 6 bits : traduire sa sortie de l’alphabet uuencode vers l’alphabet xxencode donne donc des lignes xxencode correctes, caractère de longueur compris :
import binascii
UU = "`" + "".join(chr(c) for c in range(33, 96))
XX = "+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
TO_XX = str.maketrans(UU, XX)
def xxencode_line(chunk: bytes) -> str:
return binascii.b2a_uu(chunk, backtick=True).decode().translate(TO_XX)
xxencode_line(b"Cat") # '1Eq3o\n'
Donnez-lui 45 octets à la fois, puis ajoutez begin 644 name en haut, + et end en bas. Pour décoder, traduisez avec str.maketrans(XX, UU) et appelez binascii.a2b_uu sur chaque ligne. Voir la page Python pour en savoir plus sur les octets et les encodages.
Problèmes courants
- Une sortie illisible à partir d’un fichier censé être en xxencode. Vérifiez le premier caractère des lignes pleines. Si c’est
M, le fichier est en uuencode ; utilisez l’outil uuencode. - Une ligne se décode avec une mauvaise longueur. Le caractère de longueur a été modifié ou perdu, souvent par un client de messagerie qui a recoupé les lignes. Xxencode ne peut pas récupérer une ligne coupée ou fusionnée.
- Le fichier décodé est tronqué. Le bloc a été publié en plusieurs parties. Assemblez-les dans l’ordre, avec un seul
beginet un seulend, et décodez le résultat.
FAQ
Quelle différence entre xxencode et uuencode ?
Seulement l’alphabet. Les deux écrivent 3 octets en 4 caractères, sur des lignes de 45 octets au plus avec un caractère de longueur, encadrées par begin et end. Uuencode utilise la plage ASCII de l’accent grave et de ! jusqu’à _ ; xxencode utilise +, -, les chiffres et les lettres.
Comment savoir si un fichier est en xxencode ou en uuencode ?
Regardez le premier caractère des lignes de données pleines : M signifie uuencode et h xxencode, car tous deux représentent 45 octets. Des lignes pleines de ponctuation comme `, # ou % sont de l’uuencode.
Quel programme décode les fichiers xxencodés ?
UUDeview gère les deux formats ; sous Debian et Ubuntu, c’est le paquet uudeview. Le uudecode de GNU sharutils lit l’uuencode et le Base64, mais pas le xxencode.
Pourquoi un fichier xxencodé se termine-t-il par une ligne + ?
+ est le caractère xxencode de la valeur 0 : une ligne qui ne contient que + est donc une ligne de données de longueur nulle. Elle joue le même rôle que la ligne avec un seul accent grave en uuencode, juste avant end.