Passa al contenuto principale

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

  1. Qualsiasi carattere ASCII stampabile (valori decimali da 33 a 60 e da 62 a 126) può (may) essere rappresentato letteralmente, tranne « = »
  2. Tab e spazio possono (may) essere rappresentati letteralmente, a meno che non appaiano alla fine di una riga
  3. Il segno uguale « = » è usato come carattere di escape
  4. I caratteri non rappresentabili sono rappresentati come « = » seguito da due cifre esadecimali che rappresentano il valore dell'ottetto
  5. Se i dati contengono interruzioni di riga significative, devono (must) essere rappresentate come codifica quoted-printable
  6. 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

  1. Dividere il flusso di dati di input in gruppi di 24 bit (3 ottetti)
  2. Dividere ogni gruppo di 24 bit in quattro gruppi di 6 bit
  3. Mappare ogni gruppo di 6 bit a un carattere nell'alfabeto Base64
  4. 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:

CodificaScopoLimite di RigaSet di CaratteriEspansione
7bitTesto ASCII puro998 byteUS-ASCIINessuna
8bitTesto esteso998 byteOttetti a 8 bitNessuna
binaryDati binariNessunoQualsiasiNessuna
quoted-printablePrincipalmente ASCII76 caratteriASCII + escape~1-3x
base64Binario arbitrario76 caratteri64 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)