yEnc est un système de codage binaire-texte pour le transfert de fichiers binaires dans des messages sur Usenet ou par courrier électronique . Il réduit la surcharge par rapport aux méthodes de codage US-ASCII précédentes en utilisant une méthode de codage à 8 bits . La surcharge de yEnc est souvent (si chaque valeur d'octet apparaît à peu près avec la même fréquence en moyenne) aussi faible que 1 à 2 %, par rapport à 33 à 40 % de surcharge pour les méthodes de codage à 6 bits comme uuencode et Base64 . yEnc a été initialement développé par Jürgen Helbing, et sa première version a été publiée début 2001. En 2003, yEnc est devenu le système de codage standard de facto pour les fichiers binaires sur Usenet. Le nom yEncode est un jeu de mots sur « Pourquoi encoder ? » , puisque l'idée est de n'encoder des caractères que s'il est absolument nécessaire de respecter la norme de format de message.
Comment fonctionne yEnc
Les corps des messages Usenet et e-mails sont censés contenir uniquement des caractères ASCII ( RFC 822 ou RFC 2822). La plupart des codages concurrents représentent les fichiers binaires en les convertissant en caractères ASCII imprimables, car la plage de caractères ASCII imprimables est prise en charge par la plupart des systèmes d'exploitation. Cependant, comme cela réduit considérablement le jeu de caractères disponible, il y a une surcharge importante (bande passante gaspillée) sur les réseaux 8 bits-octets. Par exemple, dans uuencode et Base64, trois octets de données sont codés en quatre caractères ASCII imprimables, ce qui équivaut à quatre octets, soit une surcharge de 33 % (sans compter la surcharge des en-têtes). yEnc utilise un caractère (un octet) pour représenter un octet du fichier, à quelques exceptions près.
yEnc suppose que les données binaires peuvent être transmises principalement via Usenet et email. Par conséquent, 252 des 256 octets possibles sont transmis non codés en un seul octet, que ce résultat soit un caractère ASCII imprimable ou non. Seuls NUL , LF , CR et = sont échappés . LF et CR sont échappés car les RFC qui définissent les messages Internet exigent toujours que les retours chariot et les sauts de ligne aient une signification particulière dans un message électronique. = est le caractère d'échappement, donc lui-même est échappé. NUL est également échappé en raison de problèmes de gestion des caractères nuls dans le code courant, bien qu'à titre d'optimisation, yEnc ajoute 42 à chaque octet source de sorte que, ce qui n'est pas rare, de longues séquences d'octets nuls ne nécessitent pas beaucoup d'échappement.
Il n'existe pas de RFC ou d'autres documents de normes décrivant yEnc. La page d'accueil de yEnc contient un projet de spécification informelle et une grammaire (qui contredisent les RFC 2822 et RFC 2045), bien qu'aucun des deux n'ait été soumis à l' Internet Engineering Task Force .
Comme avec uuencoding, malgré ses défauts, yEnc reste actif et efficace sur Usenet. La page d'accueil de yEnc indique que « tous les principaux lecteurs de news ont été étendus au support yEnc ». Outlook Express , Windows Mail et Windows Live Mail de Microsoft ne fournissent pas de support yEnc pour les news ou le courrier électronique, mais des plug-ins sont disponibles. Mozilla Thunderbird décodera les fichiers yEnc en une seule partie, mais ne pourra pas combiner les binaires en plusieurs parties.
Problèmes
De nombreux programmeurs et administrateurs de news ont souligné les faiblesses de yEnc. Il souffre de nombreux défauts identiques à ceux d'Uuencode, dont un certain nombre avaient déjà été résolus des années auparavant par MIME (qui a corrigé les mêmes défauts dans Uuencode). Par exemple, yEnc nécessite que les chaînes « =ybegin » et « =yend » soient placées autour du fichier encodé dans le corps du message. Bien qu'il s'agisse d'une amélioration par rapport aux chaînes « begin » et « end » d'Uuencode, qui apparaissent plus fréquemment dans un texte normal, les lecteurs de messages peuvent toujours rencontrer les chaînes en dehors des pièces jointes (le plus souvent dans les discussions sur yEnc lui-même). yEnc et uuencode tentent également de réassembler des fichiers divisés en plusieurs messages en utilisant la ligne d'objet, ce qui n'est pas fiable.
Adoption de yEncode
Le projet de document de proposition yEncode a été rendu disponible le 31 juillet 2001. Un encodeur et un décodeur de référence ont été inclus dans la version gratuite MyNews 1.9 en novembre de la même année. yDec, un décodeur Win32 gratuit est arrivé le 14 novembre 2001. Le 21 mars 2002, Agent a pris en charge yEnc avec la version 1.91. En raison des commentaires de Juergen Helbing, la sortie a été reportée d'une semaine. Quelques jours après la sortie, Jürgen Helbing a écrit que Forté avait implémenté yEnc de la meilleure façon imaginable .
Stuffit Deluxe a ajouté le support yEnc avec la version 8.0 en 2003. PowerArchiver 9.2 a ajouté le support yEnc en mai 2005.