Zum Hauptinhalt springen

6. Content-Transfer-Encoding Header-Feld (Content-Transfer-Encoding Header Field)

Viele Medientypen, die nützlicherweise per E-Mail transportiert werden könnten, werden in ihrem „natürlichen" Format als 8-Bit-Zeichen- oder Binärdaten dargestellt. Solche Daten können über einige Transportprotokolle nicht übertragen werden. Beispielsweise beschränkt RFC 821 Mail-Nachrichten auf 7-Bit-US-ASCII-Daten mit Zeilen, die nicht länger als 1000 Zeichen sind. Das Content-Transfer-Encoding-Feld wird verwendet, um anzugeben, welche Kodierungstransformation angewendet wurde.

6.1. Content-Transfer-Encoding-Syntax

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

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

Diese Werte sind nicht von Groß-/Kleinschreibung abhängig - Base64, BASE64 und bAsE64 sind alle äquivalent.

6.2. Content-Transfer-Encoding-Semantik

7bit

Die „7bit"-Kodierung bedeutet, dass die Daten alle als kurze Zeilen von US-ASCII-Daten ohne Oktette mit Dezimalwerten größer als 127 dargestellt werden. Zeilen dürfen (must) nicht länger als 998 Oktette sein, ohne das CRLF mitzuzählen. Keine NUL-Oktette (Dezimalwert 0) sind erlaubt. CR und LF treten nur als Teil von CRLF-Sequenzen auf.

8bit

Die „8bit"-Kodierung bedeutet, dass die Daten alle als relativ kurze Zeilen mit 998 Oktetten oder weniger zwischen CRLF-Sequenzen dargestellt werden, aber Oktette mit Dezimalwerten größer als 127 können verwendet werden. Wie bei „7bit"-Daten treten CR und LF nur als Teil von CRLF-Sequenzen auf und keine NULs sind erlaubt.

binary

Die „binary"-Kodierung zeigt an, dass jede beliebige Sequenz von Oktetten erlaubt ist. Diese Kodierung wird in diesem Dokument nicht weiter definiert.

quoted-printable

Die „quoted-printable"-Kodierung ist dazu bestimmt, Daten darzustellen, die größtenteils aus Oktetten bestehen, die druckbaren Zeichen im US-ASCII-Zeichensatz entsprechen.

base64

Die „base64"-Kodierung ist entworfen, um beliebige Sequenzen von Oktetten in einer Form darzustellen, die nicht von Menschen lesbar sein muss.

6.3. Neue Content-Transfer-Encodings

Neue Content-Transfer-Encoding-Werte können (may) bei der IANA registriert werden. Die Anforderungen für eine solche Registrierung sind in RFC 2048 spezifiziert.

6.4. Interpretation und Verwendung

Die Content-Transfer-Encoding-Werte „7bit", „8bit" und „binary" bedeuten alle, dass keine Identitäts- (d.h. KEINE) Kodierungstransformation durchgeführt wurde. Als solche dienen sie einfach als Indikatoren der Domäne der Body-Daten und liefern nützliche Informationen über die Art der Kodierung, die für die Übertragung in einem gegebenen Transportsystem benötigt werden könnte.

6.5. Übersetzen von Kodierungen

Es kann wünschenswert sein, die Übertragung von nicht-textuellem Body-Inhalt ohne Kodierung unter Verwendung der Base64- oder Quoted-Printable-Kodierungen zu ermöglichen. Die Kodierungsmechanismen „8bit" und „binary" bieten solche Funktionalität.

6.6. Kanonisches Kodierungsmodell

Die hier definierten Kodierungsformate kodieren explizit alle Daten in ASCII. Wenn die kodierten Daten also nicht ASCII sind, müssen (must) sie zuerst unter Verwendung einer Zeichenkodierung in ASCII konvertiert werden. Diese Kodierung muss (must) unter Verwendung des „charset"-Parameters im Content-Type-Feld deklariert werden.

6.7. Quoted-Printable Content-Transfer-Encoding

Die Quoted-Printable-Kodierung verwendet druckbare ASCII-Zeichen (Zeichen mit Werten 33 bis 126), um eine Kodierung auf Daten zu ermöglichen, die größtenteils Text sind.

Kodierungsregeln

  1. Jedes druckbare ASCII-Zeichen (Dezimalwerte 33 bis 60 und 62 bis 126) kann (may) buchstäblich dargestellt werden, außer „="
  2. Tab und Leerzeichen können (may) buchstäblich dargestellt werden, es sei denn, sie erscheinen am Ende einer Zeile
  3. Das Gleichheitszeichen „=" wird als Escape-Zeichen verwendet
  4. Nicht darstellbare Zeichen werden als „=" gefolgt von zwei hexadezimalen Ziffern dargestellt, die den Wert des Oktetts darstellen
  5. Wenn Daten bedeutungsvolle Zeilenumbrüche enthalten, müssen (must) sie als quoted-printable-Kodierung dargestellt werden
  6. Kodierte Zeilen dürfen (must not) länger als 76 Zeichen sein, ohne das CRLF mitzuzählen

Beispiel

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. Base64 Content-Transfer-Encoding

Die Base64-Content-Transfer-Encoding ist entworfen, um beliebige Sequenzen von Oktetten in einer Form darzustellen, die nicht von Menschen lesbar sein muss.

Kodierungsprozess

  1. Den Eingabedatenstrom in Gruppen von 24 Bits (3 Oktetten) aufteilen
  2. Jede 24-Bit-Gruppe in vier Gruppen von 6 Bits aufteilen
  3. Jede 6-Bit-Gruppe einem Zeichen im Base64-Alphabet zuordnen
  4. Wenn die letzte Gruppe weniger als 24 Bits hat, mit Null-Bits auffüllen und „=" als Auffüllung in der Ausgabe hinzufügen

Base64-Alphabet

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

Beispiel

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

Kodiertes Ausgabeformat

  • Der kodierte Ausgabestrom muss (must) in Zeilen von jeweils maximal 76 Zeichen dargestellt werden
  • Alle Zeilen außer der letzten müssen (must) genau 76 Zeichen lang sein
  • Alle in den kodierten Daten erscheinenden CRLF-Paare stellen nur Zeilenumbrüche in der kodierten Ausgabe dar

Kodierungsvergleich:

KodierungZweckZeilenlimitZeichensatzExpansion
7bitReiner ASCII-Text998 BytesUS-ASCIIKeine
8bitErweiterter Text998 Bytes8-Bit-OktetteKeine
binaryBinärdatenKeineBeliebigKeine
quoted-printableMeist ASCII76 ZeichenASCII + Escape~1-3x
base64Beliebiges Binär76 Zeichen64 Zeichen~1.33x

Auswahlhilfe:

  • Reiner ASCII-Text: 7bit (keine Kodierung erforderlich)
  • Text mit gelegentlichem Nicht-ASCII: quoted-printable (bessere Lesbarkeit)
  • Binärdaten (Bilder, Anhänge): base64 (Standardmethode)
  • Moderne Systeme: 8bit oder binary (wenn unterstützt)