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)