Domanda

Ho un oggetto e-mail nel modulo:

=?utf-8?B?T3.....?=

Il corpo dell'email è codificato in utf-8 base64 - e ha decodificato bene. Attualmente sto usando il modulo Email :: MIME di Perl per decodificare l'e-mail.

Qual è il significato del delimitatore =? utf-8 e come estraggo le informazioni da questa stringa?

È stato utile?

Soluzione

I parola codificata token (as per RFC 2047 ) può verificarsi nei valori di alcune intestazioni. Vengono analizzati come segue:

=?<charset>?<encoding>?<data>?=

Charset è UTF-8 in questo caso, la codifica è B che significa base64 (l'altra opzione è Q che significa stampabile tra virgolette).

Per leggerlo, prima decodifica il base64, quindi trattalo come caratteri UTF-8.

Leggi anche i vari RFC di posta Internet per maggiori dettagli, principalmente RFC 2047 .

Dato che stai usando Perl, Encode :: MIME :: Header potrebbe essere utile:

  

SINOSSI

use Encode qw/encode decode/;
$utf8   = decode('MIME-Header', $header);
$header = encode('MIME-Header', $utf8);
     

SOMMARIO

     

Questo modulo implementa RFC 2047 Mime   Codifica intestazione. Ci sono 3 varianti   codifica dei nomi; Intestazione MIME, MIME-B   e MIME-Q. La differenza è   descritto di seguito

     
              decode()          encode()  
MIME-Header   Both B and Q      =?UTF-8?B?....?=  
MIME-B        B only; Q croaks  =?UTF-8?B?....?=  
MIME-Q        Q only; B croaks  =?UTF-8?Q?....?=

Altri suggerimenti

Penso che il modulo Encode lo gestisca con la codifica MIME-Header , quindi prova questo:

use Encode qw(decode);
my $decoded = decode("MIME-Header", $encoded);

Scopri RFC2047 . La "B" indica che la parte tra gli ultimi due "?" È codificata in base64. "Utf-8" significa naturalmente che i dati decodificati devono essere interpretati come UTF-8.

MIME :: Words degli strumenti MIME funzionano bene anche per questo. Ho riscontrato un problema con Encode e ho trovato MIME :: Words è riuscito su alcune stringhe in cui Encode no.

use MIME::Words qw(:all);
$decoded = decode_mimewords(
    'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>',
);

Questa è un'estensione standard per l'etichettatura dei set di caratteri delle intestazioni, specificata in RFC2047 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top