Mode d’emploi
- Choisissez Encoder pour créer un bloc uuencodé, ou Décoder pour en extraire les données.
- Laissez l’option « Lignes begin / end » activée et renseignez le champ « Nom du fichier » si le résultat doit fonctionner avec la commande uudecode. Désactivez-la pour n’obtenir que les lignes de données.
- Saisissez ou collez votre entrée, ou ouvrez un fichier pour en encoder les octets.
- Pour décoder, collez le bloc entier, y compris la ligne begin s’il y en a une, puis copiez le résultat ou téléchargez-le sous forme de fichier.
Qu’est-ce que uuencode ?
Uuencode, abréviation de « Unix-to-Unix encode », remonte aux alentours de 1980, époque où les fichiers étaient copiés d’une machine Unix à l’autre par des liaisons UUCP qui ne transportaient que du texte. Il transforme chaque groupe de 3 octets en quatre valeurs de 6 bits et ajoute 32 à chacune, ce qui donne des caractères imprimables allant de l’espace au tiret bas. Comme les systèmes de messagerie supprimaient souvent les espaces en fin de ligne, la valeur zéro est écrite avec un accent grave (`) au lieu d’un espace, comme le fait cet outil.
Un fichier uuencodé suit une structure fixe :
- Une ligne d’en-tête
begin 644 name, où 644 est le mode du fichier Unix en octal (lecture et écriture pour le propriétaire, lecture pour tous les autres) et « name » le nom du fichier à créer. - Des lignes de données de 45 octets d’entrée au maximum. Chacune commence par un caractère de longueur (32 plus le nombre d’octets, si bien qu’une ligne complète commence par
M), suivi de 60 caractères encodés au maximum. - Une ligne contenant un seul accent grave, qui signifie zéro octet, puis la ligne
end.
Avec les caractères de longueur et les sauts de ligne, la sortie est environ 38 % plus grande que l’entrée.
Uuencode aujourd’hui
Avant MIME, uuencode était le moyen habituel d’envoyer des programmes et des images par e-mail et de les publier sur Usenet. Le Base64 de MIME l’a remplacé au cours des années 1990 : uuencode ne permettait pas de déclarer un type de contenu, plusieurs variantes incompatibles coexistaient, et certains de ses signes de ponctuation étaient altérés par les passerelles entre systèmes ASCII et EBCDIC, ce qui a motivé la création de xxencode.
On rencontre encore des données uuencodées dans les archives de courrier et de news, d’anciens scripts shell et des systèmes hérités. Pour un nouveau projet, utilisez Base64, ou Fichier en Base64 pour des fichiers entiers.
Uuencode en ligne de commande et en Python
# Shell (GNU sharutils) : fichier d’entrée, puis nom pour la ligne begin
uuencode photo.jpg photo.jpg > photo.uu
uudecode photo.uu
# Python : une ligne de 45 octets au maximum à la fois
import binascii
line = binascii.b2a_uu(b'hello', backtick=True)
binascii.a2b_uu(line) # b'hello'
L’ancien module uu de Python a été supprimé dans Python 3.13, mais les fonctions de binascii sont toujours disponibles.
Spécifications
| Alphabet | ASCII 32 à 96 (de l’espace à `) |
|---|---|
| Taille de sortie | Environ 137 %, préfixes de ligne compris |
| Remplissage | Lignes de 45 octets au maximum |
| Norme | POSIX uuencode |
| Sensible à la casse | Oui |
Exemples
| Entrée (UTF-8) | Sortie |
|---|---|
Hello, World! | begin 644 data.bin
-2&5L;&\L(%=O<FQD(0``
`
end |
Base64.is | begin 644 data.bin
)0F%S938T+FES
`
end |
你好 | begin 644 data.bin
&Y+V@Y:6]
`
end |
Questions fréquentes
Pourquoi le texte uuencodé contient-il des accents graves ?
La valeur zéro correspondrait à un espace, et les espaces en fin de ligne se perdaient souvent en cours de transmission. De nombreux encodeurs, dont celui-ci, écrivent un accent grave à la place. Le décodeur accepte les deux.
Que signifie begin 644 ?
Cette ligne ouvre le bloc encodé. 644 est le mode de permissions Unix du fichier restauré (lecture et écriture pour le propriétaire, lecture pour tous les autres), et le mot qui suit est le nom du fichier que uudecode va créer. Vous pouvez définir ce nom dans les options.
Puis-je décoder du uuencode sans la ligne begin ?
Oui. En l’absence de ligne begin, chaque ligne est décodée comme des données. Si elle est présente, le décodage commence après elle et s’arrête à la ligne end : le texte qui entoure le bloc, comme le corps d’un e-mail, est ignoré. Les espaces de fin supprimés par les logiciels de messagerie sont rétablis automatiquement.
Uuencode est-il identique à Base64 ?
Non. Tous deux transforment 3 octets en 4 caractères, mais uuencode utilise une autre plage de caractères, un caractère de longueur sur chaque ligne ainsi que des lignes begin et end. Une sortie Base64 ne peut pas être décodée comme du uuencode, ni l’inverse.