Decodificar um cabeçalho email UTF8
Pergunta
Eu tenho um assunto do email do formulário:
=?utf-8?B?T3.....?=
O corpo do email é base64 codificação UTF-8 - e decodificou bem. Estou atual usando e-mail do Perl :: módulo MIME para decodificar o e-mail.
O que é o significado da =? Utf-8 delimitador e como faço para extrair informações a partir desta corda?
Solução
O encoded-word
fichas (como por RFC 2047 ) pode ocorrer em valores de alguns cabeçalhos. Eles são analisados ??como segue:
=?<charset>?<encoding>?<data>?=
Codificação é UTF-8, neste caso, a codificação é B
que significa base64 (a outra opção é que Q
meios citado para impressão).
Para lê-lo, primeiro decodificar o base64, então tratá-lo como caracteres UTF-8.
Leia também as várias RFCs Internet mail para mais detalhes, principalmente RFC 2047 .
Uma vez que você estiver usando Perl, Encode :: MIME :: Header poderia ser de uso:
Sinopse
use Encode qw/encode decode/; $utf8 = decode('MIME-Header', $header); $header = encode('MIME-Header', $utf8);
RESUMO
Esta implementos módulo RFC 2047 Mime Header Encoding. Há 3 variante codificação de nomes; MIME-Header, MIME-B e MIME-Q. A diferença é descrito abaixo
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?....?=
Outras dicas
Eu acho que as alças módulo Encode que com a codificação MIME-Header
, então tente o seguinte:
use Encode qw(decode);
my $decoded = decode("MIME-Header", $encoded);
Confira RFC2047 . Os meios 'B' que a parte entre os dois últimos '?' S é codificado em Base64. O 'utf-8' significa, naturalmente, que os dados decodificados deve ser interpretada como UTF-8.
MIME :: Palavras de MIME-ferramentas funcionam bem também para isso. Corri para algum problema com Encode e encontrou MIME :: Palavras sucedido em algumas cordas onde Encode não.
use MIME::Words qw(:all);
$decoded = decode_mimewords(
'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>',
);
Trata-se de uma extensão padrão para rotulagem de conjunto de caracteres de cabeçalhos, indicados na RFC2047 .