6. Campo di Intestazione Content-Transfer-Encoding (Content-Transfer-Encoding Header Field)
Molti tipi di media che potrebbero essere utilmente trasportati via email sono rappresentati, nel loro formato « naturale », come dati di caratteri a 8 bit o binari. Tali dati non possono essere trasmessi su alcuni protocolli di trasporto. Ad esempio, RFC 821 limita i messaggi di posta a dati US-ASCII a 7 bit con righe non più lunghe di 1000 caratteri. Il campo Content-Transfer-Encoding viene utilizzato per specificare quale trasformazione di codifica è stata applicata.
6.1. Sintassi di Content-Transfer-Encoding
encoding := "Content-Transfer-Encoding" ":" mechanism
mechanism := "7bit" / "8bit" / "binary" /
"quoted-printable" / "base64" /
ietf-token / x-token
Questi valori non sono sensibili al maiuscolo/minuscolo - Base64, BASE64 e bAsE64 sono tutti equivalenti.
6.2. Semantica di Content-Transfer-Encoding
7bit
La codifica « 7bit » significa che i dati sono tutti rappresentati come righe brevi di dati US-ASCII senza ottetti con valori decimali maggiori di 127. Le righe non devono (must) essere più lunghe di 998 ottetti, senza contare il CRLF. Nessun ottetto NUL (valore decimale 0) è consentito. CR e LF si verificano solo come parte di sequenze CRLF.
8bit
La codifica « 8bit » significa che i dati sono tutti rappresentati come righe relativamente brevi con 998 ottetti o meno tra le sequenze CRLF, ma possono essere usati ottetti con valori decimali maggiori di 127. Come con i dati « 7bit », CR e LF si verificano solo come parte di sequenze CRLF e nessun NUL è consentito.
binary
La codifica « binary » indica che è consentita qualsiasi sequenza di ottetti. Questa codifica non è ulteriormente definita in questo documento.
quoted-printable
La codifica « quoted-printable » è destinata a rappresentare dati che consistono in gran parte di ottetti corrispondenti a caratteri stampabili nel set di caratteri US-ASCII.
base64
La codifica « base64 » è progettata per rappresentare sequenze arbitrarie di ottetti in una forma che non deve essere leggibile dall'uomo.
6.3. Nuovi Content-Transfer-Encodings
Nuovi valori Content-Transfer-Encoding possono (may) essere registrati presso l'IANA. I requisiti per tale registrazione sono specificati nella RFC 2048.
6.4. Interpretazione e Uso
I valori Content-Transfer-Encoding « 7bit », « 8bit » e « binary » significano tutti che è stata eseguita una trasformazione di codifica di identità (cioè NESSUNA). Come tali, servono semplicemente come indicatori del dominio dei dati del corpo e forniscono informazioni utili sul tipo di codifica che potrebbe essere necessaria per la trasmissione in un dato sistema di trasporto.
6.5. Traduzione delle Codifiche
Può essere desiderabile consentire la trasmissione di contenuto del corpo non testuale senza codificarlo utilizzando le codifiche Base64 o Quoted-Printable. I meccanismi di codifica « 8bit » e « binary » forniscono tale funzionalità.
6.6. Modello di Codifica Canonico
I formati di codifica definiti qui codificano esplicitamente tutti i dati in ASCII. Pertanto, se i dati da codificare non sono ASCII, devono (must) prima essere convertiti in ASCII utilizzando una codifica di caratteri. Questa codifica deve (must) essere dichiarata utilizzando il parametro « charset » nel campo Content-Type.
6.7. Codifica Content-Transfer-Encoding Quoted-Printable
La codifica Quoted-Printable utilizza caratteri ASCII stampabili (caratteri con valori da 33 a 126) per consentire l'uso della codifica su dati che sono in gran parte testo.
Regole di Codifica
- Qualsiasi carattere ASCII stampabile (valori decimali da 33 a 60 e da 62 a 126) può (may) essere rappresentato letteralmente, tranne « = »
- Tab e spazio possono (may) essere rappresentati letteralmente, a meno che non appaiano alla fine di una riga
- Il segno uguale « = » è usato come carattere di escape
- I caratteri non rappresentabili sono rappresentati come « = » seguito da due cifre esadecimali che rappresentano il valore dell'ottetto
- Se i dati contengono interruzioni di riga significative, devono (must) essere rappresentate come codifica quoted-printable
- Le righe codificate non devono (must not) essere più lunghe di 76 caratteri, senza contare il CRLF
Esempio
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. Codifica Content-Transfer-Encoding Base64
La codifica Content-Transfer-Encoding Base64 è progettata per rappresentare sequenze arbitrarie di ottetti in una forma che non deve essere leggibile dall'uomo.
Processo di Codifica
- Dividere il flusso di dati di input in gruppi di 24 bit (3 ottetti)
- Dividere ogni gruppo di 24 bit in quattro gruppi di 6 bit
- Mappare ogni gruppo di 6 bit a un carattere nell'alfabeto Base64
- Se l'ultimo gruppo ha meno di 24 bit, riempire con bit zero e aggiungere « = » come riempimento nell'output
Alfabeto 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
Esempio
Original (ASCII): Man
Binary: 01001101 01100001 01101110
Grouped 6-bit: 010011 010110 000101 101110
Base64: T W F u
Formato di Output Codificato
- Il flusso di output codificato deve (must) essere rappresentato in righe di non più di 76 caratteri ciascuna
- Tutte le righe tranne l'ultima devono (must) essere esattamente di 76 caratteri
- Tutte le coppie CRLF che appaiono nei dati codificati rappresentano solo interruzioni di riga nell'output codificato
Confronto delle Codifiche:
| Codifica | Scopo | Limite di Riga | Set di Caratteri | Espansione |
|---|---|---|---|---|
| 7bit | Testo ASCII puro | 998 byte | US-ASCII | Nessuna |
| 8bit | Testo esteso | 998 byte | Ottetti a 8 bit | Nessuna |
| binary | Dati binari | Nessuno | Qualsiasi | Nessuna |
| quoted-printable | Principalmente ASCII | 76 caratteri | ASCII + escape | ~1-3x |
| base64 | Binario arbitrario | 76 caratteri | 64 caratteri | ~1.33x |
Guida alla Selezione:
- Testo ASCII puro: 7bit (nessuna codifica necessaria)
- Testo con occasionali non-ASCII: quoted-printable (migliore leggibilità)
- Dati binari (immagini, allegati): base64 (metodo standard)
- Sistemi moderni: 8bit o binary (se supportato)