Date de publication du RFC : Novembre 1996
Auteur(s) du RFC : Keith Moore (University of Tennessee)
Chemin des normes
Première rédaction de cet article le 2 novembre 2008
La série de RFC sur
MIME, qui a introduit les caractères composés
(et les écritures non-latines), ainsi que les objets multimédia, dans
le monde du courrier électronique, comprend,
entre autres, ce RFC qui normalise une méthode pour mettre des
caractères non-ASCII dans les
en-têtes du courrier, ces métadonnées situées
avant le corps du message et structurées en nom:
valeur
.
Normalement, le courrier, tel qu'il était normalisé par le RFC 822 (aujourd'hui RFC 5322), ne permettait que le jeu de caractères ASCII dans les en-têtes. C'est ainsi qu'il fallait écrire :
From: Stephane Bortzmeyer <bortzmeyer@sources.org> Subject: Du cafe bien fort !
au lieu de la forme correcte en français :
From: Stéphane Bortzmeyer <bortzmeyer@sources.org> Subject: Du café bien fort !
Notre RFC 2047 vise tout simplement à fournir une solution à ce problème, en encodant les caractères non-ASCII, en Quoted-Printable ou en Base64. Les en-têtes ci-dessus apparaitront donc sur le réseau comme :
From: =?iso-8859-1?q?St=E9phane?= Bortzmeyer <bortzmeyer@sources.org> Subject: Du =?iso-8859-1?q?caf=E9?= bien fort !
Ainsi, le message pourra passer à travers toute l'infrastructure du courrier qui n'accepte que l'ASCII. Ce sera au MUA de les remettre sous une forme lisible (voir par exemple mon article Décoder les en-têtes du courrier électronique).
L'approche de notre RFC est donc conservatrice : on ne demande pas à tous les logiciels sur le trajet de connaître MIME, autrement ce dernier n'aurait jamais été déployé. (MIME n'utilise même pas, par prudence, certaines fonctions du RFC 822 qui auraient pu aider mais qui sont trop souvent boguées, cf. section 1.) Aujourd'hui où l'infrastructure du courrier est très différente, une méthode plus radicale pourrait être réaliste et c'est l'approche du bien plus récent RFC 6532.
La section 2 du RFC donne la grammaire exacte : un terme encodé est
précédé de =?
suivi de l'encodage des caractères. (Pour le corps
du message, tel que normalisé dans le RFC 2045,
l'encodage est indiqué dans un en-tête,
Content-Type
. Pour les en-têtes eux-mêmes, il a
fallu trouver une autre solution.) Puis on trouve le surencodage
appliqué par MIME, Q
pour
Quoted-Printable et B
pour
Base64 puis le terme lui-même, ainsi encodé. Le
tout est terminé par un ?=
. Voici le résultat,
produit par un programme Python avec le module email :
% python >>> from email.header import Header >>> h = Header('niçoise', 'iso-8859-1') >>> print h =?iso-8859-1?q?ni=E7oise?=
Notons que l'encodage utilisé est appelé charset (jeu de caractères) par MIME, ce qui n'est pas vraiment le terme correct (« utf-8 » est un encodage, le jeu de caractères est Unicode). La section 3 normalise ce paramètre, pour lequel les valeurs standard de MIME sont utilisées.
La section 4 décrit en détail les surencodages possibles, Quoted-Printable et Base64. Le premier (RFC 2045) convient mieux lorsque le texte comprend des caractères latins, avec quelques caractèrs composés. Le second (RFC 4648) est préférable si le texte est composé de caractères non-latins. La section 4.2 détaille quelques spécificités de Quoted-Printable et notamment l'utilisation du _ à la place de l'espace comme dans :
% python >>> from email.header import Header >>> h = Header("réveillés dans une Citroën niçoise", "ISO-8859-1") >>> print h =?iso-8859-1?q?r=E9veill=E9s_dans_une_Citro=EBn_ni=E7oise?=
Pour le même genre de tâches, les programmeurs Perl peuvent utiliser Encode::MIME::Header.
Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)
Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)