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
- Tout caractère ASCII imprimable (valeurs décimales 33 à 60 et 62 à 126) peut (may) être représenté littéralement, à l'exception de « = »
- La tabulation et l'espace peuvent (may) être représentés littéralement, sauf s'ils apparaissent à la fin d'une ligne
- Le signe égal « = » est utilisé comme caractère d'échappement
- Les caractères non représentables sont représentés par « = » suivi de deux chiffres hexadécimaux représentant la valeur de l'octet
- Si les données contiennent des sauts de ligne significatifs, ils doivent (must) être représentés comme encodage quoted-printable
- 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
- Diviser le flux de données d'entrée en groupes de 24 bits (3 octets)
- Diviser chaque groupe de 24 bits en quatre groupes de 6 bits
- Mapper chaque groupe de 6 bits à un caractère dans l'alphabet Base64
- 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 :
| Encodage | Objectif | Limite de Ligne | Jeu de Caractères | Expansion |
|---|---|---|---|---|
| 7bit | Texte ASCII pur | 998 octets | US-ASCII | Aucune |
| 8bit | Texte étendu | 998 octets | Octets 8 bits | Aucune |
| binary | Données binaires | Aucune | Quelconque | Aucune |
| quoted-printable | Principalement ASCII | 76 caractères | ASCII + échappement | ~1-3x |
| base64 | Binaire arbitraire | 76 caractères | 64 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é)