Comment encoder et décoder en uuencode
Pour encoder :
- Saisissez ou collez du texte dans Entrée · Texte. Le bloc uuencodé s’affiche dans Sortie · uuencode.
- Réglez le Nom du fichier sous la sortie ; il est écrit dans la ligne
begin. Par défaut, c’estdata.bin. - Décochez lignes begin/end si vous ne voulez que les lignes encodées, par exemple pour les intégrer dans un autre format.
Pour décoder :
- Cliquez sur uuencode → Texte dans le sélecteur de sens.
- Collez les données uuencodées. Elles peuvent inclure le texte du message ou de l’article de news qui les entoure : tout ce qui précède la ligne
beginest ignoré. - Lisez le texte dans la sortie, ou cliquez sur Enregistrer les octets pour télécharger le fichier décodé sous le nom indiqué dans la ligne
begin. Pour un contenu binaire, réglez Vers sur Hex pour l’inspecter d’abord.
Anatomie d’un fichier uuencodé
Encoder le texte Cat avec le nom de fichier hello.txt donne :
begin 644 hello.txt
#0V%T
`
end
begin 644 hello.txtindique les permissions Unix et le nom du fichier.- Chaque ligne de données commence par un caractère de longueur : le nombre d’octets de la ligne plus 32.
#vaut 35 : cette ligne contient donc 3 octets. Une ligne pleine contient 45 octets et commence parM, suivi de 60 caractères. - Les caractères de données fonctionnent à peu près comme Base64 : chaque groupe de 3 octets devient quatre valeurs de 6 bits, et chaque valeur v s’écrit avec le caractère de code v + 32. Une valeur 0 s’écrit avec un accent grave au lieu d’une espace.
- La ligne contenant un seul accent grave est une ligne vide de longueur 0, et
endferme le bloc.
Une entrée plus longue montre la structure d’une ligne pleine :
begin 644 fox.txt
M5&AE('%U:6-K(&)R;W=N(&9O>"!J=6UP<R!O=F5R('1H92!L87IY(&1O9RX@
*,#$R,S0U-C<X.0``
`
end
C’est The quick brown fox jumps over the lazy dog. 0123456789 : 45 octets sur la ligne M et 10 sur la ligne * (42 − 32 = 10). Chaque ligne porte sa propre longueur et un saut de ligne : les données uuencodées sont donc environ 38 % plus grosses que l’entrée, un peu plus qu’en Base64.
Où l’on croise encore uuencode
Uuencode vient de Unix-to-Unix Copy (UUCP) et était la méthode standard pour envoyer des fichiers binaires par e-mail et sur Usenet avant MIME. Aujourd’hui, on le rencontre dans de vieilles archives de messagerie, des articles Usenet, certains transferts de fichiers embarqués ou mainframe, et des scripts qui envoient des fichiers à mail par un pipe.
La convention de l’accent grave date de cette époque. Certaines passerelles supprimaient les espaces en fin de ligne, ce qui détruisait les données encodées avec une espace pour zéro ; l’accent grave, lui, survit. Cet encodeur écrit des accents graves, et le décodeur accepte les deux.
Uuencode en ligne de commande et en Python
Avec GNU sharutils installé :
uuencode hello.txt hello.txt > hello.uu
uudecode hello.uu
Le premier argument est le fichier d’entrée et le second le nom écrit dans la ligne begin. uudecode crée le fichier portant ce nom dans le répertoire courant. Ajoutez -m à uuencode pour obtenir du Base64 à la place.
En Python, binascii encode une ligne de 45 octets au plus à la fois :
import binascii
binascii.b2a_uu(b"Cat", backtick=True) # b'#0V%T\n'
binascii.a2b_uu(b"#0V%T") # b'Cat'
Ajoutez vous-même la ligne begin 644 name, la ligne finale avec l’accent grave et end. D’autres exemples d’encodage sur la page Python.
Problèmes courants
- Une erreur à la position 1. Il n’y a pas de ligne
beginet le texte n’est pas non plus constitué de lignes uuencodées seules. Vérifiez que vous avez copié le bloc entier. - Une sortie illisible à partir d’un bloc
begin-base64. Ce bloc a été écrit paruuencode -met c’est du Base64. Copiez les lignes entrebegin-base64et====dans le décodeur Base64. - Le fichier est tronqué ou a des octets faux près des fins de ligne. Un client de messagerie a recoupé les lignes ou supprimé les espaces finales. Chaque ligne de données doit être intacte ; essayez de récupérer la pièce jointe d’origine ou la source du message.
- Un message en plusieurs parties ne se décode qu’en partie. Les gros fichiers étaient souvent répartis sur plusieurs messages. Assemblez les parties dans l’ordre, en gardant un seul
beginet un seulend, avant de décoder.
FAQ
Comment corriger « uuencode: command not found » ?
La commande n’est pas installée par défaut sur la plupart des systèmes Linux. Sous Debian et Ubuntu, sudo apt install sharutils ajoute uuencode et uudecode ; Fedora a aussi un paquet sharutils.
Que signifie begin 644 ?
644 est le mode de fichier Unix que doit recevoir le fichier décodé (lecture/écriture pour le propriétaire, lecture pour les autres), et le mot qui suit est le nom du fichier. uudecode crée ce fichier ; cette page utilise ce nom pour Enregistrer les octets.
Uuencode, est-ce la même chose que Base64 ?
Les deux transforment 3 octets en 4 caractères, mais uuencode utilise la plage ASCII de l’espace au tiret bas et ajoute un caractère de longueur par ligne. Base64 a un autre alphabet et c’est lui qu’utilisent les e-mails MIME. uuencode -m écrit du Base64 dans un bloc begin-base64.
Python sait-il encore décoder les fichiers uuencodés ?
Oui, avec binascii.a2b_uu, une ligne à la fois. Le module de plus haut niveau uu a été déprécié dans Python 3.11 et supprimé dans la 3.13.