6. Content-Transfer-Encodingヘッダーフィールド (Content-Transfer-Encoding Header Field)
電子メール経由で有用に転送できる多くのメディアタイプは、その「自然な」形式では、8ビット文字またはバイナリデータとして表現されます。このようなデータは、一部のトランスポートプロトコル上では送信できません。たとえば、RFC 821は、メールメッセージを1000文字以下の行を持つ7ビットUS-ASCIIデータに制限しています。Content-Transfer-Encodingフィールドは、どのエンコーディング変換が適用されたかを指定するために使用されます。
6.1. Content-Transfer-Encodingの構文 (Content-Transfer-Encoding Syntax)
encoding := "Content-Transfer-Encoding" ":" mechanism
mechanism := "7bit" / "8bit" / "binary" /
"quoted-printable" / "base64" /
ietf-token / x-token
これらの値は大文字小文字を区別しません。Base64、BASE64、bAsE64はすべて同等です。
6.2. Content-Transfer-Encodingのセマンティクス (Content-Transfer-Encoding Semantics)
7bit
「7bit」エンコーディングは、データがすべて、10進値127より大きいオクテットを持たないUS-ASCIIデータの短い行として表現されることを意味します。行は、CRLFを除いて998オクテット以下でなければなりません (must)。NULオクテット(10進値0)は許可されません。CRおよびLFは、CRLFシーケンスの一部としてのみ発生します。
8bit
「8bit」エンコーディングは、データがすべて、CRLFシーケンス間に998オクテット以下の比較的短い行として表現されることを意味しますが、10進値127より大きいオクテットが使用される場合があります。「7bit」データと同様に、CRおよびLFはCRLFシーケンスの一部としてのみ発生し、NULは許可されません。
binary
「binary」エンコーディングは、任意のオクテットシーケンスが許可されることを示します。このエンコーディングは、この文書ではこれ以上定義されていません。
quoted-printable
「quoted-printable」エンコーディングは、US-ASCII文字セットの印刷可能な文字に対応するオクテットで主に構成されるデータを表現することを意図しています。
base64
「base64」エンコーディングは、人間が読める必要のない形式で任意のオクテットシーケンスを表現するように設計されています。
6.3. 新しいContent-Transfer-Encodings (New Content-Transfer-Encodings)
新しいContent-Transfer-Encoding値はIANAに登録できます (may)。そのような登録の要件はRFC 2048で指定されています。
6.4. 解釈と使用 (Interpretation and Use)
Content-Transfer-Encoding値「7bit」、「8bit」、および「binary」はすべて、アイデンティティ(つまり、NO)エンコーディング変換が実行されたことを意味します。そのため、これらは単に本文データのドメインのインジケーターとして機能し、特定のトランスポートシステムでの送信に必要となる可能性のあるエンコーディングの種類に関する有用な情報を提供します。
6.5. エンコーディングの変換 (Translating Encodings)
Base64またはQuoted-Printableエンコーディングを使用せずに非テキストの本文コンテンツの送信を許可することが望ましい場合があります。「8bit」および「binary」エンコーディングメカニズムは、そのような機能を提供します。
6.6. 正規エンコーディングモデル (Canonical Encoding Model)
ここで定義されたエンコーディング形式は、すべてのデータをASCIIで明示的にエンコードします。したがって、エンコードされるデータがASCIIでない場合は、まず何らかの文字エンコーディングを使用してASCIIに変換する必要があります (must)。このエンコーディングは、Content-Typeフィールドの「charset」パラメータを使用して宣言する必要があります (must)。
6.7. Quoted-Printable Content-Transfer-Encoding
Quoted-Printableエンコーディングは、印刷可能なASCII文字(値33から126の文字)を使用して、主にテキストであるデータでエンコーディングを使用できるようにします。
エンコーディング規則 (Encoding Rules)
- 印刷可能なASCII文字(10進値33から60および62から126)は、「=」を除いて、文字通りに表現できます (may)
- タブとスペースは、行末に表示されない限り、文字通りに表現できます (may)
- 等号「=」はエスケープ文字として使用されます
- 表現できない文字は、「=」の後にオクテットの値を表す2桁の16進数が続くものとして表現されます
- データに意味のある改行が含まれている場合、それらはquoted-printableエンコーディングとして表現されなければなりません (must)
- エンコードされた行は、CRLFを除いて76文字以下でなければなりません (must not)
例 (Example)
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
Base64 Content-Transfer-Encodingは、人間が読める必要のない形式で任意のオクテットシーケンスを表現するように設計されています。
エンコーディングプロセス (Encoding Process)
- 入力データストリームを24ビット(3オクテット)のグループに分割
- 各24ビットグループを4つの6ビットグループに分割
- 各6ビットグループをBase64アルファベットの1文字にマッピング
- 最後のグループが24ビット未満の場合、ゼロビットでパディングし、出力に「=」をパディングとして追加
Base64アルファベット (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
例
Original (ASCII): Man
Binary: 01001101 01100001 01101110
Grouped 6-bit: 010011 010110 000101 101110
Base64: T W F u
エンコードされた出力形式 (Encoded Output Format)
- エンコードされた出力ストリームは、各76文字以下の行で表現されなければなりません (must)
- 最後の行を除くすべての行は、正確に76文字でなければなりません (must)
- エンコードされたデータに表示されるCRLFペアは、エンコードされた出力の改行のみを表します
エンコーディング比較:
| エンコーディング | 目的 | 行制限 | 文字セット | 拡張率 |
|---|---|---|---|---|
| 7bit | 純粋なASCIIテキスト | 998バイト | US-ASCII | なし |
| 8bit | 拡張テキスト | 998バイト | 8ビットオクテット | なし |
| binary | バイナリデータ | なし | 任意 | なし |
| quoted-printable | ほぼASCII | 76文字 | ASCII + エスケープ | ~1-3倍 |
| base64 | 任意のバイナリ | 76文字 | 64文字 | ~1.33倍 |
選択ガイド:
- 純粋なASCIIテキスト: 7bit(エンコーディング不要)
- 時々非ASCIIを含むテキスト: quoted-printable(より読みやすい)
- バイナリデータ(画像、添付ファイル): base64(標準的な方法)
- 最新システム: 8bit または binary(サポートされている場合)