Aller au contenu principal

6. Champ d'En-tête Content-Transfer-Encoding (Content-Transfer-Encoding Header Field)

De nombreux types de médias qui pourraient utilement être transportés par courrier électronique sont représentés, dans leur format « naturel », sous forme de données de caractères 8 bits ou binaires. De telles données ne peuvent pas être transmises sur certains protocoles de transport. Par exemple, la RFC 821 limite les messages de courrier aux données US-ASCII 7 bits avec des lignes ne dépassant pas 1000 caractères. Le champ Content-Transfer-Encoding est utilisé pour spécifier quelle transformation d'encodage a été appliquée.

6.1. Syntaxe de Content-Transfer-Encoding

encoding := "Content-Transfer-Encoding" ":" mechanism

mechanism := "7bit" / "8bit" / "binary" /
"quoted-printable" / "base64" /
ietf-token / x-token

Ces valeurs ne sont pas sensibles à la casse - Base64, BASE64 et bAsE64 sont tous équivalents.

6.2. Sémantique de Content-Transfer-Encoding

7bit

L'encodage « 7bit » signifie que les données sont toutes représentées sous forme de courtes lignes de données US-ASCII sans octets avec des valeurs décimales supérieures à 127. Les lignes ne doivent (must) pas dépasser 998 octets, sans compter le CRLF. Aucun octet NUL (valeur décimale 0) n'est autorisé. CR et LF ne se produisent que dans le cadre de séquences CRLF.

8bit

L'encodage « 8bit » signifie que les données sont toutes représentées sous forme de lignes relativement courtes avec 998 octets ou moins entre les séquences CRLF, mais des octets avec des valeurs décimales supérieures à 127 peuvent être utilisés. Comme avec les données « 7bit », CR et LF ne se produisent que dans le cadre de séquences CRLF et aucun NUL n'est autorisé.

binary

L'encodage « binary » indique que toute séquence d'octets est autorisée. Cet encodage n'est pas défini davantage dans ce document.

quoted-printable

L'encodage « quoted-printable » est destiné à représenter des données qui consistent largement en octets correspondant à des caractères imprimables dans le jeu de caractères US-ASCII.

base64

L'encodage « base64 » est conçu pour représenter des séquences d'octets arbitraires sous une forme qui n'a pas besoin d'être lisible par l'homme.

6.3. Nouveaux Content-Transfer-Encodings

De nouvelles valeurs Content-Transfer-Encoding peuvent (may) être enregistrées auprès de l'IANA. Les exigences pour un tel enregistrement sont spécifiées dans la RFC 2048.

6.4. Interprétation et Utilisation

Les valeurs Content-Transfer-Encoding « 7bit », « 8bit » et « binary » signifient toutes qu'aucune transformation d'encodage d'identité (c'est-à-dire AUCUNE) n'a été effectuée. En tant que telles, elles servent simplement d'indicateurs du domaine des données du corps et fournissent des informations utiles sur le type d'encodage qui pourrait être nécessaire pour la transmission dans un système de transport donné.

6.5. Traduction des Encodages

Il peut être souhaitable de permettre la transmission de contenu de corps non textuel sans l'encoder en utilisant les encodages Base64 ou Quoted-Printable. Les mécanismes d'encodage « 8bit » et « binary » fournissent une telle fonctionnalité.

6.6. Modèle d'Encodage Canonique

Les formats d'encodage définis ici encodent explicitement toutes les données en ASCII. Ainsi, si les données encodées ne sont pas en ASCII, elles doivent (must) d'abord être converties en ASCII en utilisant un encodage de caractères. Cet encodage doit (must) être déclaré en utilisant le paramètre « charset » dans le champ Content-Type.

6.7. Encodage Content-Transfer-Encoding Quoted-Printable

L'encodage Quoted-Printable utilise des caractères ASCII imprimables (caractères avec des valeurs de 33 à 126) pour permettre l'utilisation de l'encodage sur des données qui sont largement du texte.

Règles d'Encodage

  1. Tout caractère ASCII imprimable (valeurs décimales 33 à 60 et 62 à 126) peut (may) être représenté littéralement, à l'exception de « = »
  2. La tabulation et l'espace peuvent (may) être représentés littéralement, sauf s'ils apparaissent à la fin d'une ligne
  3. Le signe égal « = » est utilisé comme caractère d'échappement
  4. Les caractères non représentables sont représentés par « = » suivi de deux chiffres hexadécimaux représentant la valeur de l'octet
  5. Si les données contiennent des sauts de ligne significatifs, ils doivent (must) être représentés comme encodage quoted-printable
  6. Les lignes encodées ne doivent (must not) pas dépasser 76 caractères, sans compter le CRLF

Exemple

Original: If you believe that truth=beauty, then surely mathematics is the most beautiful branch of philosophy.

Encoded: If you believe that truth=3Dbeauty, then surely mathematics is the most =
beautiful branch of philosophy.

6.8. Encodage Content-Transfer-Encoding Base64

L'encodage Content-Transfer-Encoding Base64 est conçu pour représenter des séquences d'octets arbitraires sous une forme qui n'a pas besoin d'être lisible par l'homme.

Processus d'Encodage

  1. Diviser le flux de données d'entrée en groupes de 24 bits (3 octets)
  2. Diviser chaque groupe de 24 bits en quatre groupes de 6 bits
  3. Mapper chaque groupe de 6 bits à un caractère dans l'alphabet Base64
  4. Si le dernier groupe a moins de 24 bits, remplir avec des bits zéro et ajouter « = » comme remplissage dans la sortie

Alphabet Base64

Value Encoding  Value Encoding  Value Encoding  Value Encoding
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y

Exemple

Original (ASCII): Man
Binary: 01001101 01100001 01101110
Grouped 6-bit: 010011 010110 000101 101110
Base64: T W F u

Format de Sortie Encodé

  • Le flux de sortie encodé doit (must) être représenté en lignes de 76 caractères maximum chacune
  • Toutes les lignes sauf la dernière doivent (must) faire exactement 76 caractères
  • Toutes les paires CRLF apparaissant dans les données encodées représentent uniquement des sauts de ligne dans la sortie encodée

Comparaison des Encodages :

EncodageObjectifLimite de LigneJeu de CaractèresExpansion
7bitTexte ASCII pur998 octetsUS-ASCIIAucune
8bitTexte étendu998 octetsOctets 8 bitsAucune
binaryDonnées binairesAucuneQuelconqueAucune
quoted-printablePrincipalement ASCII76 caractèresASCII + échappement~1-3x
base64Binaire arbitraire76 caractères64 caractères~1.33x

Guide de Sélection :

  • Texte ASCII pur : 7bit (aucun encodage nécessaire)
  • Texte avec occasionnellement non-ASCII : quoted-printable (meilleure lisibilité)
  • Données binaires (images, pièces jointes) : base64 (méthode standard)
  • Systèmes modernes : 8bit ou binary (si supporté)