uuencode

Un article de Wikipédia, l'encyclopédie libre.

Les programmes uuencode et son symétrique uudecode sont des programmes de conversions de données binaires en texte, disponibles sur la quasi-totalité des systèmes Unix/Linux, il permettent de convertir sans dégradation des données binaires en vue de leur transmission via un support qui ne le permettrait pas normalement. Ces deux programmes et l'algorithme qu'ils implémentent ont été portés sur un très grand nombre de systèmes d'exploitation. Le nom uuencode vient de Unix to Unix Encoding.

Sommaire

[modifier] Histoire

Ces deux programmes ont été écrits avant l'utilisation massive d'Internet afin en particulier que la suite logicielle uucp puisse transporter fiablement des fichiers binaires. Cette suite logicielle permet des communications inter-serveurs via modem et était initialement conçue pour échanger du texte simple (en n'utilisant qu'une partie des 128 caractères ASCII).

Ils ont été principalement utilisés pour la transmission de messages (courrier électronique et forums Usenet) mais aujourd'hui leur utilisation est largement remplacée par les extensions MIME et en particulier l'encodage base64 (qui emploie un jeu de caractères plus portable dans le flux encodé).

[modifier] Principe de fonctionnement

Le programme uuencode produit un flux de texte (une sucession de caractères ASCII) dont la première ligne est :

 begin <mode> <nom>

<mode> et <nom> sont remplacés respectivement par la valeur octale représentant les droits d'accès à placer sur le fichier décodé et par le nom du fichier à construire lors du décodage. Le flux de données encodées se termine par une ligne contenant juste le texte :

 end

Entre ces deux lignes seuls les 65 caractères suivants peuvent être rencontrés :

 es !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /
 0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ?
 @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O
 P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _
 `

le caractère noté es ci-dessus est le caractère ASCII représentant un espace et dont le code numérique est 32. Les autres caractères portent les codes numériques allant de 32+1 à 32+64.

Le programme d'encodage lit le fichier d'origine par groupe de trois octets (éventuellement complété par des octets de valeur nulle si le nombre d'octets à encoder n'est pas mulitple de 3), puis convertit ces trois octets (soit 24 bits) en quatre groupes de 6 bits chacun, ensuite à chaque groupe de 6 bits (qui représente en base 10 un nombre compris entre 0 et 63) est ajouté la valeur 32, la valeur résultante est alors le code ASCII de l'un des caractères présentés plus haut, ce caractère est employé par l'encodeur dans le flux de sortie.

Le programme d'encodage ajoute également, et au début de chaque ligne de texte produit, le compte de caractères employés dans cette ligne et limite la taille des lignes produites à 61 caractères (soit 45 octets encodés en 60 caractères + 1 caractère pour la longueur). Ce compte de caractères (allant de 2 pour un seul octet à 60 pour 45 octets) est lui même encodé en l'augmentant de 32 avant d'être convertit en un caractère ASCII à son tour.

[modifier] Exemple

Cet exemple sert à illustrer le fonctionnement de l'encodage ; cependant comme les octets à encoder représentent ici les codes ASCII d'un texte, il n'y aurait aucune utilité à utiliser uuencode dans ce cas. Le texte utilisé en exemple est « Oh! » :

Texte O h  !
Octets à encoder (0 à 255 et en base 10) 79 104 33
Convertits en bits (base 2) 0 1 0 0 1 1 1 1 0 1 1 0 1 0 0 0 0 0 1 0 0 0 0 1
Valeur décimale de chaque groupe de 6 bits (0 à 63) 19 54 32 33
+32 51 86 64 65
Caractère produit par l'encodage 3 V @ A

L'encodage produisant ici exactement quatre octets (et 4+32=36 soit le code ASCII du caractère $) le texte émis par l'encodeur est donc :

 $3V@A

[modifier] Voir aussi

[modifier] Références

[modifier] Liens

  • (en) UUDeview programme open-source pour Unix/Windows/DOS permettant d'encoder et décoder de multiples façons