MIME (Extensions Polyvalentes pour le Courrier Internet)

Transcription

MIME (Extensions Polyvalentes pour le Courrier Internet)
Traduction approximative de la RFC 2047 en français.
Index Documentation Accueil
Network Working Group
Request for Comments: 2047
Rends obsolètes: 1521, 1522, 1590
Catégorie: Standards Track
K. Moore
University of Tennessee
Novembre 1996
MIME (Extensions Polyvalentes pour le Courrier Internet)
(EPCI) Troisième Partie :
Extensions pour les En-têtes de Message ayant du Texte de type NonASCII
(Multipurpose Internet Mail Extensions)
Statut de ce mémo
On spécifie par ce document un protocole Internet de niveau standard track pour la communauté Internet, ainsi
que les demandes de discussions et de suggestions d'améliorations. Si vous le souhaitez, vous pouvez vous
référer à l'actuelle édition de l 'Internet Official Protocol Standards" (STD 1) pour connaître l'état de
standardisation et le statut pour ce protocole. La distribution de ce mémo n'est pas limitée.
Abrégé
STD 11, RFC 822, définissent un protocole de représentation de message spécifiant très précisément les détails
qui concernent les en-têtes de message US-ASCII, et qui laissent le contenu du message, ou du corps du
message, en tant que texte brut ("flat-text") de type US-ASCII. L'actuel jeu de documents, collectivement
appelé le Multipurpose Internet Mail Extensions (extensions polyvalentes aux courriers Internet), ou MIME,
redéfini le format des messages pour permettre
(1) les corps de message texte dans un jeu de caractères autre que l'US-ASCII,
(2) un jeu extensible de différents formats pour les corps de message qui ne soient pas textuels,
(3) des corps de message composés de parties multiples, et
(4) des informations d'en-tête de type texte composés avec des jeux de caractères autre que l'US-ASCII.
Ces documents sont basés sur le travail effectué précédemment et qui est documenté par la RFC 934, le STD
11, et la RFC 1049, mais aussi les étends et les révises. Parce que la RFC 822 dit si peu en ce qui concerne le
corps des messages, ces documents "se positionnent à coté" de la RFC 822 (plutôt que de la réviser).
Ce document est le troisième document de la série. On y décrit les extensions à la RFC 822 permettant d'avoir
des données en texte non-US-ASCII dans les champs d'en-têtes du courrier Internet. Les autres documents de
cette série sont :
+ la RFC 2045, qui décrit les divers en-têtes utilisés pour décrire la structure des messages
MIME.
+ la RFC 2046, qui définit la structure générale du système permettant de typer ce qui est
supporte MIME, et défini une première série de type de media,
+ la RFC 2048, qui spécifie les diverses procédures d'enregistrement de l'IANA pour les
nouvelles capacités de MIME, et
+ la RFC 2049, qui décrit les critères pour être en conformité avec MIME et elle fournit
quelques exemples de format de message MIME, des remerciements, et la
bibliographie.
Ces documents sont des révisions des RFC 1521, 1522, et 1590, qui elles-mêmes était des révisions des RFC
1341 et 1342. Une annexe située dans la RFC 2049 décrit les différences et les changements par rapport aux
versions précédentes.
1. Introduction
La RFC 2045 décrit un mécanisme pour indiquer les parties de corps de texte qui sont codées sous divers jeux
de caractères, en plus des méthodes qui encodent ces parties de corps en tant que séquence de caractères USASCII imprimable. Ce mémo décrit des techniques similaires pour permettre l'encodage de texte non-ASCII
dans les diverses portions de l'en-tête RFC 822 [2] du message, et de manière à ce qu'il soit peu probable
d'embrouiller les logiciels déjà existants qui manipulent les messages.
Semblables aux techniques d'encodages décrites dans la rfc 2045, les techniques esquissées ici, ont été conçues
pour permettre l'utilisation de caractères non-ASCII dans les en-têtes de message de manière à ce qu'il soit peu
probable qu'elles soient gênées par les caprices de programmes déjà existant qui manipulent le courrier
Internet. En particulier, certains programmes faisant le relais de courrier sont connus pour(a) supprimer certains
champs d'en-tête de message alors qu'ils en gardent d'autre, (b) réarranger l'ordre des adresses dans les champs
To ou Cc, (c) réarranger l'ordre (vertical) des champs d'en-têtes, et/ou (d) "rassembler" les en-têtes des
messages à des emplacements différents de ceux situés dans le message d'origine. En plus, certains
programmes de lecture de courrier sont connus pour avoir des difficultés à faire une analyse grammaticale
correcte des messages d'en-têtes qui, bien que ce soit en accord avec la RFC 822, font usage de la mise entre
guillemets avec des antislash pour "cacher" des caractères spéciaux tel que ">", "," ou ":" , ou qui exploite les
caractéristiques utilisées peu fréquentent de cette spécification.
Bien qu'il soit malencontreux que ces programmes n'interprètent pas correctement les en-têtes RFC 822,
"casser" ces programmes causeraient de sévères problèmes de fonctionnement pour le système de courrier de
courrier Internet. Les extensions décrites dans ce mémo ne font pas confiance aux caractéristiques de la RFC
822 peu utilisées.
Au lieu de cela, certaines séquences de caractères ASCII imprimable "ordinaire" (connu en tant que "mot
encodé" (traduction de "encoded-words")) sont réservées pour l'usage de l'encodage des données. La syntaxe
des mots encodés est telle qu'il est peu vraisemblable qu'elles apparaissent "accidentellement" comme du texte
normal dans les champs d'en-têtes. En outre, les caractères utilisés dans les mots encodés sont restreints à ceux
qui n'ont pas de signification particulière dans le contexte où le mot encodé apparaît.
Généralement, un "encoded-word" est une séquence de caractères ASCII imprimable qui commence par
"=?",finit par "?=", et qui a donc ces deux "?" entre. On définit un jeu de caractère et une méthode d'encodage,
et cela comprends aussi les textes d'origines qui sont encodés avec des caractères ASCII graphiques, tout en
étant en accord avec les règles de la méthode d'encodage.
Un composeur de courrier qui met en application cette spécification donnera un sens au texte non-ASCII
entrant par les champs d'en-têtes, mais aussi devra traduire ces champs (ou les portions appropriées de ces
champs) dans des mots encodés avant de les insérer dans l'en-tête de message.
Un lecteur de courrier qui implémente cette norme devra reconnaître les mots encodés quand ils apparaissent
dans certaines portions de l'en-tête du message. Au lieu, d'afficher les mots encodés "à l'identique", il
retranscrira et affichera le texte d'origine dans le jeu de caractère désigné.
REMARQUES
Ce mémo s'appuie fortement sur la notation et les termes définis dans les RFC 822 et RFC 2045. En particulier,
la syntaxe pour la ABNF utilisée dans ce mémo est définie dans la RFC 822, dont beaucoup de symbole de la
RFC 822 de terminaison ou de non-terminaison, sont utilisés dans la grammaire des extensions d'en-tête
définies ici. Parmi les symboles définis dans la RFC 822, et ceux référencés dans ce mémo, on a : 'addr-spec',
'atom', 'CHAR', 'comment', 'CTLs', 'ctext', 'linear-white-space', 'phrase', 'quoted-pair'. 'quoted-string', 'SPACE',
et 'word'. Une implémentation de cette extension de protocole qui soit une réussite implique que l'on ait été
attentif aux définitions RFC 822 de ces termes.
Quand le terme "ASCII" apparaît dans ce mémo, on fait référence au "7-Bit American Standard Code for
Information Interchange", ANSI X3.4-1986. Le nom de jeu de caractère MIME pour ce jeu de caractère est
"US-ASCII". Quand on ne se réfère pas spécialement au nom du jeu de caractère MIME, ce document utilise le
terme "ASCII", à la fois pour la brièveté et pour être en cohérence avec la RFC 822. Cependant, les
implémenteurs doivent faire attention à ce que le nom de jeu de caractère doit être orthographié "US-ASCII"
dans le message MIME et dans les en-têtes des parties de corps.
Ce mémo définit un protocole pour la représentation de texte non-ASCII dans les champs d'en-tête. On NE
DOIT PAS définir de façon précise de traduction entre les "8-bit headers" (en-tête 8-bit) et les en-têtes
véritablement ASCII, ni même supposer qu'une telle traduction soit possible.
2. Syntaxe des mots encodés
Un 'mot encodé' ('encoded-word') est défini par la grammaire ABNF suivante. On utilise la notation de la RFC
822, exception faite que les caractères d'espace blanc NE DOIVENT PAS apparaître entres les composantes
d'un 'mot encodé'.
mot encodé = "=?" charset "?" encoding "?" encoded-text "?="
charset = token ; voir section 3
encoding = token ; voir section 4
token = 1*<tous CHAR excepté SPACE, les CTLs, et especials>
especials = "(" / ")" / "<" / ">" / "@" / "," / ";" / ":" / " <"> / "/" / "[" / "]" / "?" / "." / "="
encoded-text = 1*< Tous caractères ASCII imprimable autre que "?" ou SPACE>
; (mais voir "utilisation de mots encodés dans les
; en-têtes", section 5)
Les noms "d'encodage" ('encoding') et de "jeux de caractère" ('charset') sont indépendants à la case. Ainsi le
nom de jeu de caractère "ISO-8859-1" est équivalent à "iso-8859-1", et l'encodage "Q" peut être écrit soit "Q"
ou "q".
Un "mot encodé" (encoded-word) ne peut avoir une longueur de plus de 75 caractères, en y incluant le 'charset',
et l''encoding', l''encodeed-text' et les délimiteurs. Si on désire encoder plus de texte qu'il n'en rentrerait dans un
"mot encodé" de 75 caractères, de multiples "mots encodés" (séparés par CRLF SPACE) peuvent être utilisés.
Alors qu'il n'y a pas de limite à des champs d'en-tête multi-ligne, chaque ligne de champs d'en-tête qui contient
un ou plusieurs 'mots -encodé' est limité à 76 caractères.
Les restrictions de taille sont prises à la fois pour faciliter l'interoperabilité au travers des passerelles de courrier
inter-réseaux, et pour imposer une limite sur le nombre de recherche "vers l'avant" (traduction de lookahead)
qu'un analyseur d'en-tête doit faire (à la cherche un délimiteur de fin ?=) avant que l'on puisse décider si un
marqueur (token) est un 'encoded word' ou quelque chose d'autre.
IMPORTANT: Les 'mots encodés' sont conçus pour être reconnu comme des 'atomes' par les analyseurs de
RFC 822. En conséquence, les caractères d'espace blanc non encodé("unencoded") (tel que ESPACE et HTAB)
sont INTERDITS à l'intérieur d'un mot 'encoded-word'. Par exemple la séquence de caractère
=?iso-8859-1?q?this is some text?=
devra être analysé grammaticalement comme étant quatre 'atome's plutôt qu'un atome (par un analyseur
grammatical rfc822), ou comme un 'mot encodé' (par un analyseur qui comprends les 'mots encodés' ('encodedword')). La bonne manière d'encoder la chaîne "this is some text" est d'encoder aussi les caractères SPACE,
comme par. ex.,
=?iso-8859-1?q?this=20is=20some=20text?=
Les caractères qui peuvent apparaître dans le 'texte encodé' sont limités par les règles de la section 5.
3. Jeux de caractères
Le morceau 'charset' du mot encodé ('encoded-word') précise le jeu de caractère associé au texte non-encodé.
Un 'charset' peut être n'importe quel nom de jeu caractère autorisé pour le paramètre MIME "charset" d'une
partie de corps de type "text/plain", ou peut être tous les noms de jeu de caractères enregistrés par l'IANA qui
peuvent être utilisé avec un content-type MIME text/plain.
Certains jeux de caractère utilisent des techniques de code-switching (changement de codage) pour s'aiguiller
vers le "Mode ASCII" ou vers d'autres modes. Si un texte non encodé dans un 'mot encodé' contient une
séquence qui a par effet que l'interpréteur de jeu de caractère s'oriente vers un mode autre que vers un mode
ASCII, il DOIT y avoir des codes de contrôles supplémentaires de façon à ce que le mode ASCII soit de
nouveau sélectionné à la fin de l''encoded-word'. (Cette règle s'applique séparément à chacun des mots encodés,
y compris aux mots encodés qui sont adjacent à l'intérieur d'un seul champ d'en-tête).
Quand il y a la possibilité d'utiliser plus d'un jeu de caractère pour représenter le texte dans un mot encodé, et
en l'absence d'accord privé entre l'expéditeur et les destinataires d'un message, on recommande que les jeux
ISO-8859-* soient utilisés de préférence à d'autres jeux de caractères.
4. Encodages
Initialement, les valeurs légales de "encoding" sont "Q" et "B". Ces encodages sont décrit au-dessous. On
recommande d'utiliser l'encodage "Q" quand la plupart des caractères a être encodés font partie du jeu de
caractères ASCII. Sinon, l'encodage 'B' devra être utilisé. Néanmoins, un lecteur de courrier qui prétends
reconnaître les mots encodés DOIT être capable d'accepter l'un de ces encodages pour tous les jeux de
caractères qu'il supporte.
Seul un sous-jeu de caractères ASCII imprimable peut être utilisé dans l' 'encoded-text'. Les caractères tab et
Space ne sont pas autorisé, de façon à ce que le début et la fin d'un mot encodé soient évident. Le caractère "?"
est utilisé à l'intérieur d'un 'mot-encodé' pour séparer les diverses portions de 'mot-encodé' l'une de l'autre, et
ainsi ne peut apparaître dans la portion d''encoded-text'. Dans certains contextes, d'autres caractères aussi sont
aussi illégaux. Par exemple, un mot encodé dans une 'phrase' précédant une adresse dans le champ d'en-tête
From ne doit pas contenir les choses dites "speciales" définies dans la RFC 822. Enfin, d'autres caractères sont
interdits dans certains contexte, afin d'assurer la fiabilité pour les messages qui passent au travers de passerelles
inter réseaux de courrier.
L'encodage "B" satisfait de façon automatique à ces exigences. L'encodage "Q" permet qu'une large étendue de
caractères imprimables soit utilisé dans des emplacements non critiques dans les champs d'en-têtes (par ex.
subject), alors que beaucoup moins de caractères valides peuvent être utilisés pour les autres emplacements.
4.1. L'encodage "B"
L'encodage "B" est identique à l'encodage "BASE64" défini par la RFC 2045.
4.2. L'encodage "Q"
L'encodage "Q" est similaire à l'encodage de content-transfer-encoding "Quoted-Printable" défini dans la RFC
2045. Il est conçu pour donner la possibilité d'avoir un texte contenant la plupart des caractères ASCII qui soit
déchiffrable sur un terminal sans décodage.
(1) Toute valeur 8-bit doit être représenté par un "=" suivi par deux chiffres hexadécimaux.
Par exemple, si le jeu de caractère en cours est ISO-8859-1, le caractère "=" devrait
ainsi être encodé en "=3D", et un espace par "=20" (Les majuscules devront être
utilisées pour les chiffres hexadécimaux compris de "A" à "F".)
(2) La valeur 8-bit hexadécimale 20 (par ex., ISO-8859-1 SPACE) peut être représenté par
"_" ( underscore, ASCII 95.). (Ce caractère peut ne pas passer au travers de certaines
passerelles de courrier inter-réseaux, mais son utilisation augmente grandement la
lisibilité des données encodées "Q" pour des lecteurs de courrier qui ne supportent pas
cet encodage.). Remarquez que le "_" représente toujours l'hexadécimal 20, même si le
caractère SPACE occupe une position de code différant dans le jeu de caractère utilisé.
(3) Les valeurs 8-bit qui correspondent au caractère ASCII imprimable autre que "=", "?",
et "_" (underscore), PEUVENT être représenté par ces caractères (mais il faut voir
section 5 pour les restrictions.). En particulier, SPACE et TAB NE DOIVENT PAS être
représenté par eux-mêmes à l'intérieur des mots encodés.
5. Utilisation des mots encodés dans les en-têtes de message
Un 'mot encodé' peut apparaître dans un en-tête de message ou dans un en-tête de partie de corps en respectant
les règles suivantes :
(1) Un 'mot encodé' peut remplacer une balise 'text' (comme défini par la RFC 822) dans tous les champs
d'en-tête Subject ou Commentaire, dans tous les champs d'en-tête d'extension de message, ou dans tous
les champs de partie de corps MIME pour qui le corps du champ est défini en tant que '*text'. Un 'mot
encodé' peut aussi apparaître dans toutes les en-têtes de parties de corps ou de messages ("X-") définis
par un utilisateur.
Le texte ASCII ordinaire et les 'mots encodés' peuvent apparaître ensemble dans le même champ d'entête. Toutefois, un 'mot encodé' qui apparaît dans un champ d'en-tête défini comme '*text' DOIT être
séparé de tout 'mot-encodé' adjacent ou 'text' par des 'espaces-blanc-linéaire'('linear-white-space').
(2) Un 'mot encodé' peut apparaître à l'intérieur d'un commentaire ('comment') qui délimité par "(" et ")",
c.a.d., partout où un 'ctext' est autorisé. Plus précisément, la définition ABNF de la RFC 822 pour
'comment' est modifié par ce qui suit:
comment = "(" *(ctext / quoted-pair / comment / encoded-word) ")"
Un 'mot encodé' codé en "Q" qui apparaît dans un 'comment' NE DOIT PAS contenir de caractères "(",
")" ou " tout 'mot encodé' qui apparaît dans un 'comment' DOIT être séparé de tout 'mot encodé' ou 'ctext'
adjacent par un 'linear-white-space'.
Il est important de noter que 'comment' soit seulement reconnu à l'intérieur des corps de champs
"structured". Dans les champs, dont les corps sont définis en tant que '*text', "(" et ")" sont traités en tant
que caractère ordinaire plutôt qu'en tant que délimiteurs de commentaires, et la règle (1) de cette section
s'applique (voir la RFC 822, sections 3.1.2 et 3.1.3).
(3) En tant que substitution d'une entité 'word' à l'intérieur d'une 'phrase', par exemple, une qui précède une
adresse dans un champ From, To, ou Cc. La définition ABNF pour 'phrase' de la RFC 822 devient ainsi :
phrase = 1*( encoded-word / word )
Dans ce cas, les jeux de caractères qui peuvent être utilisé dans un 'mot encodé par encodage "Q" encodé
est restreint à : <lettre majuscules et minuscule, "!","*","+", "-", "/", "=", et "_" (tiret bas, ASCII 95)>.
Un 'mot encodé', qui apparaît à l'intérieur d'une 'phrase' DOIT être séparé de tout 'word', 'text' ou 'special'
adjacents par un 'linear-white-space'.
Ce sont les SEULS emplacements où un 'mot encodé' peut apparaître. Plus précisément :
+ Un 'mot encodé' NE DOIT PAS apparaître dans une partie d''addr-spec'.
+ Un 'mot encodé' NE DOIT PAS apparaître dans une 'quoted-string'.
+ Un 'mot encodé' NE DOIT PAS être utilisé dans un champ d'en-tête Received.
+ Un 'mot encodé' NE DOIT PAS être utilisé dans un paramètre de champ d'en-tête
MIME Content-Disposition et Content-Type, ou dans un corps de champ d'en-tête
structuré excepté à l'intérieur d'un 'comment' ou d'une 'phrase'
Le 'encoded-text' dans un 'mot encodé' doit de part lui-même être limité (sic..: traduction de "self-contained");
Cela implique que le morceau d' 'encoded-text' d'un 'mot encodé' en "B" sera d'une longueur égale à un multiple
de 4 caractères. Pour un "mot encodé' en "Q", tout caractère "=" qui apparaît dans le morceau d' 'encoded-text'
devra être suivi par deux caractères hexadécimaux.
Chaque 'mot encodé' DOIT coder un nombre entier d'octets. L''encoded-text' de chaque 'mot encodé' doit être
formé correctement selon les normes d'encodage ; Le 'encoded-text' ne peut se continuer dans le prochain 'mot
encodé' ; (Par exemple,"=?charset?Q?=?==?charset?Q?AB?=" est illégal, parce que les deux chiffres
hexadécimaux "AB" doivent suivre le "=" du même 'mot encodé'.).
Chaque 'mot encodé' DOIT représenter un nombre entier de caractère. Un caractère multi-octets ne doit pas être
coupé en deux dans des 'mots encodés' qui soient adjacents.
Seules des données imprimables et les caractères d'espace blanc peuvent être encodé en utilisant ce système.
Toutefois, puisque ces systèmes d'encodages permettent l'encodage de valeurs arbitraires d'octet, les lecteurs de
courrier qui implémentent ce décodage devrait s'assurer que l'affichage des données décodées sur le terminal du
destinataire ne provoquera pas des effets de bords non voulus.
L'utilisation de ces méthodes pour encoder des données non textuelles (par exemple, des images, ou des sons)
n'est pas définie avec ce mémo. L'utilisation de 'mots encodés' pour représenter les chaînes de caractère
purement ASCII est autorisé, mais pas encouragé. Pour de rare cas, il peut être nécessaire d'encoder le texte
ordinaire qui ressemble à des 'mots encodés'.
6. Support des 'encoded-word' par les lecteurs de courrier
6.1. Reconnaissance des 'mots encodés' dans les en-têtes de message
Un lecteur de courrier doit analyser le message et les en-têtes de partie de corps d'après les règles de la RFC
822 pour reconnaître de façon correcte les "mots encodés".
Les 'mots encodés' doivent être identifiés comme suit :
(1) Tout champ d'en-tête de partie de corps ou de message définis en tant que '*text' ou tout
autres champs d'en-tête définis par l'utilisateur, doit être analysé comme suit : en
commençant au début du corps de champs et en suivant immédiatement chaque
occurrence de 'linear-white-space' (Space), chaque séquence de plus de 75 caractères
imprimables (ne contenant pas de 'limear-white-space') devra être examinée pour voir si
c'est un 'mot encodé' en fonction des règles de syntaxe de la section 2. Toute autre
séquence de caractères imprimable devra être traitée comme du texte ASCII ordinaire.
(2) tous champs d'en-tête non définis en tant que '*text' doit être analysé d'après les règles
syntaxiques de ce champ d'en-tête. Cependant, tout 'word' qui apparaît à l'intérieur d'une
'phrase' doit être traité comme un 'mot encodé' si c'est en concordance avec les règles
syntaxiques de la section 2. Sinon, on devra les traiter en tant que 'word' ordinaire.
(3) A l'intérieur d'un 'comment', toutes séquences de plus de 75 caractères imprimables (ne
contenant pas de 'linear-white-space'), qui satisfont aux règles syntaxiques de la section
2, devront être traitées en tant que 'encoded-word'. Sinon, on devra les traiter en tant que
texte normal de commentaire.
(4) Il N'est Pas nécessaire qu'un champ d'en-tête MIME-Version soit présent pour que les
'mots encodés' soient interprétés en accord de cette norme. Une raison pour cela, est
qu'il n'est pas prévu que le lecteur de courrier analyse entièrement la syntaxe de l'en-tête
de message avant d'afficher les lignes qui pourraient contenir des 'mots encodés'.
6.2. Affichages des 'mots encodés'
Tous 'mots encodés' ainsi reconnus sont décodés, et, si c'est possible, le texte non encodé qui en résulte est
affiché dans le jeu de caractère d'origine.
NOTE: le Décodage et l'affichage des mots encodés s'effectuent *après* qu'un corps de champ structuré soit
analysé entre ces marqueurs (token). Il est donc possible de cacher les caractères 'spéciaux' ('special') dans des
mots encodés qui, quand ils sont affichés, ne seront pas distingué des caractères 'spéciaux' du texte qui les
entoures. Pour cette raison et bien d'autres, il N'est généralement PAS possible de traduire un en-tête de
message contenant les 'mots encodés' en une forme non encodé que l'on puisse ensuite analyser en un lecteur de
courrier RFC 822.
Quand on affiche un champ d'en-têtes particulier qui contiens de multiple 'mots encodés', tous 'linear-whitespace' qui séparent une paire de mots encodés adjacents, est ignoré (ceci permet l'utilisation de multiple 'mots
encodés' afin de représenter de longues chaînes de texte non encodé ou sont situés les espaces, sans avoir à
séparer les 'mots encodés').
Dans le cas où d'autre encodage serait définis dans le futur, et que le lecteur de courrier ne supporte pas
l'encodage utilisé, on peut (a) afficher le 'mot encodé' sous forme de texte ordinaire, ou (b) le remplacer par un
message approprié indiquant que le texte ne peut être décodé.
Si le lecteur de courrier ne supporte pas le jeu de caractère utilisé, on peut (a) afficher le 'mot encodé' comme
du texte ordinaire(par exemple, comme il apparaît dans l'en-tête), (b) faire un "gros effort" pour l'afficher
comme si les caractères était disponible, ou (c) le substituer par un message approprié indiquant que le texte
décodé pourra ne pas être affiché.
Si le jeu de caractère qui est utilisé employé des techniques de commutation de code (code-switching
techniques), l'affichage du texte encodé commence implicitement en "mode ASCII". En plus, le lecteur de
courrier doit s'assurer après le "mot encodé" ait été affiché que le périphérique de sortie soit de nouveau en
"mode ASCII".
6.3. Lecteur de courrier manipulant des 'mots encodés mal formés'
Il est possible qu'un 'mot encodé' bien qu'en accord avec la syntaxe définie en section 2, soit mal formé si on se
référe aux règles qui régissent l'encodage utilisé. Par exemple :
(1) Un 'mot encodé' qui contient des caractères qui ne sont pas autorisés pour un encodage
spécifique (par exemple, un "-" pour un encodage "B", ou un SPACE ou un HTAB pour
l'encodage "B" ou l'encodage "Q"), n'a pas une forme correcte.
(2) Tous 'mots encodés' qui codent un nombre non entier de caractères ou d'octets ne
génèrent pas de forme correcte.
On ne doit pas s'attendre à ce qu'un lecteur de courrier affiche le texte associé à un 'mot encodé' qui a une
forme incorrecte. Toutefois, un lecteur de courrier NE DOIT PAS empêcher l'affichage ou la manipulation d'un
message parce qu'un 'mot encodé' est mal formé.
7. Conformité
Un programme de composition de courrier prétendant être conforme à cet spécification DOIT s'assurer que
toute chaîne de caractères ASCII imprimable (hormis les espaces blanc) à l'intérieur d'un '*text' ou d'un 'ctext'
qui commence par "=?" et qui finit par '?=' est un 'mot encodé' valide. ("commence"' signifie : Au début du
corps de champ, suivant immédiatement le 'linear-white-space', ou suivant immédiatement un '(' pour un 'mot
encodé' à l'intérieur d'un '*ctrext'; "fini" signifie : à la fin du corps de champ ; précédant immédiatement 'linearwhite-space', ou immédiatement précèdent un ')' pour un 'encoded-word' à l'intérieur '*ctext'). De plus, tous
'word' à l'intérieur d'une 'phrase' qui commence par "=?" et qui fini par "?=3" doit être un 'mot encodé' valide.
Un programme de lecteur de courrier prétendant être conforme à cette norme doit être capable de distinguer les
'mots encodés' des 'text', 'ctext', ou des 'word', en fonction des règles de la section 6, chaque fois qu'ils
apparaissent dans les emplacements approprié dans les en-têtes de messages. Il doit supporter à la fois
l'encodage "B" et "Q" pour tous jeux de caractères qu'il admet. Le programme doit être capable d'afficher les
textes non-encodé si le jeu de caractères est "US-ASCII". Pour les jeux de caractères ISO-8859-*, le
programme de lecture de courrier doit au moins être capable d'afficher les caractères qui font partie aussi du jeu
ASCII.
8. Exemples
Ce qui suit sont des exemples d'en-têtes de messages comprenant des 'mots encodés' :
From: =?US-ASCII?Q?Keith_Moore?= <[email protected]>
To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <[email protected]>
CC: =?ISO-8859-1?Q?Andr=E9?= Pirard <[email protected]>
Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=
=?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=
Remarque: Dans le premier 'mots encodé' du champ Subject situé au-dessus, le dernier "=" à la fin de l'
'encoded-text' est nécessaire parce que chacun des 'mots encodés' doit se terminer de part luimême (le caractère "=" termine un groupe de 4 caractères base64 représentant 2 octets. Un octet
supplémentaire aurait pu être encodé dans le premier 'mot encodé' (de manière à ce que le mot
encodé contienne un multiple de 3 octets encodé), si ce n'est le fait que le second 'mot encodé'
utilise un 'charset' diffèrent de celui du premier.
From: =?ISO-8859-1?Q?Olle_J=E4rnefors?= <[email protected]>
To: [email protected], [email protected]
Subject: Time for ISO 10646?
To: Dave Crocker <[email protected]>
Cc: [email protected], [email protected]
From: =?ISO-8859-1?Q?Patrik_F=E4ltstr=F6m?= <[email protected]>
Subject: Re: RFC-HDR care and feeding
From: Nathaniel Borenstein <[email protected]>
(=?iso-8859-8?b?7eXs+SDv4SDp7Oj08A==?=)
To: Greg Vaudreuil <[email protected]>, Ned Freed
<[email protected]>, Keith Moore <[email protected]>
Subject: Test of new header generator
MIME-Version: 1.0
Content-type: text/plain; charset=ISO-8859-1
Les exemples suivants illustrent la manière dont un texte contenant les 'mots encodés' apparaissent dans un
corps de champ structuré. Les règles sont légèrement différente pour les champs définis en tant que '*text' parce
que '(' et ')' ne sont pas reconnues en tant que délimitateurs de 'comment' (commentaire). [Section 5, paragraphe
(1)].
Pour chacun des exemples suivant, si on a mis les mêmes séquences dans la zone '*text', la forme "affiché
comme" N'est PAS traité comme un mot encodé, mais comme étant identique à la "forme encodée". Ceci étant
dû au fait que chacun des mots encodées dans les exemples suivants est adjacent à un des caractères "(" ou ")".
forme encodée
affiché comme
--------------------------------------------------------(=?ISO-8859-1?Q?a?=)
(a)
(=?ISO-8859-1?Q?a?= b)
(a b)
A l'intérieur d'un 'comment', les espaces blancs DOIVENT apparaître entre le
'mot encodé' et en entourant le texte. [Section 5, paragraphe (2)]. Cependant,
l'espace blanc n'est pas nécessaire entre le "(" initial qui commence le 'comment',
et le 'mot encodé'.
(=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)
(ab)
L'espace blanc n'est pas affiché s'il est entre des 'mots encodés'.
(=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)
(ab)
Même de multiples ESPACES entre des 'mots encodés' sont ignorés si c'est pour
être affiché.
(=?ISO-8859-1?Q?a?=
=?ISO-8859-1?Q?b?=)
(ab)
Toute quantité d'espace linéaire blanc entre des 'mots encodés', même si cela
comprends un CRLF suivi par un ou plusieurs ESPACE, est ignoré si c'est pour
l'afficher.
(=?ISO-8859-1?Q?a_b?=)
(a b)
Au lieu d'essayer de faire afficher un ESPACE à l'intérieur une portion de texte
d'encodage, l'ESPACE DOIT être encodé en tant que partie du 'mot encodés'.
(=?ISO-8859-1?Q?a?= =?ISO-8859-2?Q?_b?=) (a b)
Au lieu d'essayer de faire afficher un ESPACE entre deux chaînes de texte
d'encodage, l'ESPACE PEUT (MAY) être encodé en tant que morceau d'un des
'mot encodé'.
9. Références
[RFC 822]
Crocker, D., "Standard for the Format of ARPA Internet Text Messages", STD 11, RFC 822,
UDEL, Août 1982.
[RFC 2049] Borenstein, N., and N. Freed, "Multipurpose Internet Mail Extensions (MIME) Part Five:
Conformance Criteria and Examples", RFC 2049, Novembre 1996.
[RFC 2045] Borenstein, N., and N. Freed, "Multipurpose Internet Mail Extensions (MIME) Part One: Format
of Internet Message Bodies", RFC 2045, Novembre 1996.
[RFC 2046] Borenstein N., and N. Freed, "Multipurpose Internet Mail Extensions (MIME) Part Two: Media
Types", RFC 2046, Novembre 1996.
[RFC 2048] Freed, N., Klensin, J., and J. Postel, "Multipurpose Internet Mail Extensions (MIME) Part Four:
Registration Procedures", RFC 2048, Novembre 1996.
10. Considérations sécuritaires
Les problèmes de sécurité ne sont pas traités dans ce mémo.
11. Remerciements
L'auteur veut remercier Nathaniel Borenstein, Issac Chan, Lutz Donnerhacke, Paul Eggert, Ned Freed, Andreas
M. Kirchwitz, Olle Jarnefors, Mike Rosin, Yutaka Sato, Bart Schaefer, et Kazuhiko Yamamoto, pour leur avis
utiles, leurs commentaires perspicaces, et leurs questions éclairée en réaction aux versions précédentes de cette
norme.
12. Adresse de l'auteur
Keith Moore
University of Tennessee
107 Ayres Hall
Knoxville TN 37996-1301
EMail: [email protected]
Annexe - changement depuis la RFC 1522 (sans aucun ordonnancement particulier)
+ déclaration formelle que la Version-MIME n'est pas nécessaire pour utiliser les 'encoded-word'
+ ajout explicite de remarque pour les SPACEs et TABs disant qu'ils ne sont pas autorisé à l'intérieur
d'encoded-word', expliquant qu'un 'encoded-word' doit paraître identique aux 'atom' pour un analyseur
grammatical RFC 822. Parseur.value pour être précis).
+ ajout d'exemples fournit par Olle Jarnefors (merci !) qui illustre comment les mots encodés avec des
espaces blancs linéaires sont affichés.
+ Liste explicite des termes définis dans la rfc822 et référencés dans ce mémo.
+ réparation de transcription typographique qui avait provoqué la disparition d'une ou deux lignes et de deux
caractères pour le texte qui en résulté, cela étant du à des "bizarreries nroff".
+ clarification disant que les mots encodés sont autorisé dans les champs '*text' à la fois dans les en-têtes
RFC822 et dans les en-têtes de parties de corps MIME, et NON en tant que valeurs de paramètres.
+ clarification des conditions pour revenir à l'ASCII à l'intérieur portion encodé d'un 'encoded-word', pour
n'importe quel jeu de caractères qui utilise des séquence de codes de commutation.
+ ajout d'une remarque pour les 'encoded-word qui sont limité par "(" et ")" à l'intérieur d'un commentaire et
non à l'intérieur d'un *text (comme c'est bizarre !).
+ arrangement de l'exemple Andre Pirard pour se débarrasser du "_" traînant après le =E9 (plus besoin post1342).
+ éclaircissement : un 'encoded-word' peut apparaître immédiatement après le premier "(" ou immédiatement
avant le dernier ")" délimiteur de commentaire, pas seulement adjacent à "(" et ")" *within* *ctext (que l'on
pourrait traduire à l'intérieur d'un *ctext).
+ ajout d'un note qui explique qu'un 'encoded-word' "B" aura toujours un multiple de 4 caractères dans la
portion 'encoded-text'.
+ ajout d'une remarque pour le "=" dans les exemples
+ remarque en ce qui concerne le traitement des 'encoded-word' qui s'effectuent par une analyse *after*
(après), et les implications que cela a.
+ affirmation formelle disant que l'on ne peut s'attendre de traduction entre la 1522 et la vanilla 822 ou plus
communément appelé "en-têtes 8-bit".
+ affirmation formelle disant que les 'encoded-word' ne sont pas valables à l'intérieur de 'chaîne entre
guillemets' (quoted-string) .
Fin de traduction.