← RFC Reference

RFC 2047 : MIME Partie 3 — Extensions d'en-tête de message pour texte non-ASCII

Piste de normalisation MIME — Extensions multipurposées du courrier Internet Published March 2026
ELI5: Les en-têtes d'e-mail comme Subject et From sont limités à l'ASCII simple — lettres anglaises et ponctuation basique. RFC 2047 est l'astuce qui vous permet d'écrire une ligne Subject en japonais, un nom d'expéditeur en arabe, ou un nom accentué en français. Il encode les caractères non-ASCII dans un wrapper sûr pour ASCII que n'importe quel serveur de messagerie peut transporter, et les clients de messagerie le décodent à nouveau pour l'affichage.

Pourquoi cela existe

RFC 2045 et RFC 2046 ont résolu le problème du contenu non-ASCII dans les corps de messages avec Content-Transfer-Encoding. Mais les en-têtes d'e-mail — Subject, noms d'affichage From, noms d'affichage To, et autres — sont régis par RFC 5322, qui les restreint à 7 bits US-ASCII.

Cela crée un problème évident : des milliards d'utilisateurs d'e-mail écrivent dans des langues qui nécessitent des caractères non-ASCII. Sans RFC 2047, vous ne pouviez pas envoyer un e-mail avec :

RFC 2047 définit la syntaxe encoded-word : un moyen compact d'intégrer du texte non-ASCII dans les en-têtes ASCII uniquement, lisibles par tout client de messagerie compatible MIME.

Comment cela fonctionne

Le format Encoded-Word

Un encoded-word a cette structure :

=?charset?encoding?encoded-text?=

Les trois composants sont :

Composant Objectif Valeurs
charset Le jeu de caractères du texte original UTF-8, ISO-8859-1, ISO-2022-JP, etc.
encoding Comment le texte est codé en ASCII B (base64) ou Q (variante quoted-printable)
encoded-text La représentation codée Caractères ASCII uniquement

Encodage B (Base64)

Utilise l'encodage base64 standard. Meilleur pour le texte fortement non-ASCII, comme les scripts CJK :

; Subject: "Meeting confirmation" en japonais
Subject: =?UTF-8?B?5Lya6K2w44Gu56K66KqN?=

; Nom d'affichage From en chinois
From: =?UTF-8?B?5byg5LiJ?= <zhang@example.com>

Encodage Q (variante Quoted-Printable)

Un encodage quoted-printable modifié optimisé pour les en-têtes. Comme QP de corps, les octets non-ASCII deviennent des paires hexadécimales =XX. Différence clé : les espaces sont codés comme des traits de soulignement (_) :

; Subject: "Café menu" avec e accentué
Subject: =?UTF-8?Q?Caf=C3=A9_menu?=

; Nom d'affichage From : "René Dupont"
From: =?UTF-8?Q?Ren=C3=A9_Dupont?= <rene@example.com>

; Subject: "Gruße aus Berlin" (salutations allemandes)
Subject: =?UTF-8?Q?Gru=C3=9Fe_aus_Berlin?=

L'encodage Q est plus lisible quand la plupart du texte est ASCII avec seulement quelques caractères non-ASCII. L'encodage B est plus compact quand la plupart des caractères sont non-ASCII.

Où les Encoded-Words peuvent apparaître

Les encoded-words sont autorisés dans des positions spécifiques dans les en-têtes :

Les encoded-words ne sont pas autorisés à l'intérieur des quoted-strings, dans la local-part ou le domaine d'une adresse e-mail, ou comme valeurs de paramètres dans les en-têtes structurés comme Content-Type (utilisez RFC 2231 pour cela).

Détails techniques clés

Limites de longueur

Chaque encoded-word ne doit pas dépasser 75 caractères. Si le texte codé est plus long, il doit être divisé en plusieurs encoded-words séparés par un espace plié (CRLF + espace ou tabulation) :

; Long subject divisé sur deux encoded-words
Subject: =?UTF-8?B?5LuK5pel44Gu5Lya6K2w44Gr44Gk44GE44Gm?=
 =?UTF-8?B?44GU5qGI5YaF44GE44Gf44GX44G+44GZ?=

Quand deux encoded-words adjacents sont séparés seulement par un espace linéaire, l'espace entre eux est ignoré pendant le décodage. Cela permet de diviser facilement le texte long sur plusieurs encoded-words.

Sélection du charset

Utilisez toujours UTF-8 pour les nouveaux messages. Les autres charsets existent pour des raisons d'héritage :

Charset Cas d'utilisation Recommandation
UTF-8 Couvre tous les caractères Unicode Utilisez toujours celui-ci
ISO-8859-1 Héritage Europe de l'Ouest Ne pas utiliser dans les nouveaux messages
ISO-2022-JP Encodage héritage japonais Toujours vu de certains clients de messagerie japonais
GB2312 Héritage chinois simplifié Ne pas utiliser dans les nouveaux messages

Interaction avec le pliage d'en-tête

RFC 5322 limite les lignes d'en-tête à 998 caractères et recommande de les maintenir sous 78. Les encoded-words interagissent avec le pliage : vous pouvez casser entre encoded-words aux limites d'espace, mais vous ne devez jamais casser au milieu d'un encoded-word. Le wrapper =?...?= doit être sur une seule ligne.

Règles de décodage

Quand un client de messagerie rencontre un encoded-word, il :

  1. Extrait le charset, le type d'encodage et le texte codé du wrapper =?charset?encoding?text?=.
  2. Décode le texte en utilisant base64 (B) ou quoted-printable (Q).
  3. Interprète les octets résultants selon le charset déclaré.
  4. Affiche le texte Unicode décodé à l'utilisateur.

Si le client ne reconnaît pas le charset, il doit afficher l'encoded-word tel quel plutôt que d'afficher du texte garni.

Exemples

Un message complet avec en-têtes codés

MIME-Version: 1.0
From: =?UTF-8?Q?Ren=C3=A9_Dupont?= <rene@example.fr>
To: =?UTF-8?B?5bGx55Sw5aSq6YOO?= <yamada@example.jp>
Subject: =?UTF-8?Q?Re:_R=C3=A9union_du_15_mars?=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Bonjour Taro,

Confirmons la r=C3=A9union pour le 15 mars.

Remarque : l'en-tête utilise les encoded-words RFC 2047 (=?...?=), tandis que le corps utilise l'encodage quoted-printable régulier (=XX sans le wrapper). Ce sont des mécanismes différents pour différentes parties du message.

Comparaison d'encodage

Le même texte — « München » — encodé des deux façons :

; Encodage Q : lisible, bon pour le texte surtout ASCII
=?UTF-8?Q?M=C3=BCnchen?=

; Encodage B : compact mais opaque
=?UTF-8?B?TcO8bmNoZW4=?=

Erreurs courantes

Impact sur la livraison

Related RFCs