我有一个邮件主题的形式:
=?utf-8?B?T3.....?=
邮件正文是utf-8 base64编码的,解码工作顺利完成。我目前使用Perl的Email::MIME模块来解码该电子邮件。
?utf-8分隔符的含义是什么?我该如何从这个字符串中提取信息?
根据RFC 2047,一些标题的值中可能会出现encoded-word
标记。它们的解析如下:
=?<charset>?<encoding>?<data>?=
在这种情况下,字符集为UTF-8,编码是B
,意味着使用base64(另一个选项是Q
,意味着Quoted Printable)。
要阅读它,首先解码base64,然后把它当作UTF-8字符处理。
此外,可以阅读各种Internet Mail RFC获取更多详细信息,主要是RFC 2047。
由于您正在使用Perl,可能会用到Encode::MIME::Header:
SYNOPSIS
use Encode qw/encode decode/;
$utf8 = decode('MIME-Header', $header);
$header = encode('MIME-Header', $utf8);
摘要
本模块实现RFC 2047 Mime头编码。有3种变体编码名称:MIME-Header, MIME-B和MIME-Q。它们的区别如下所述。
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?....?=
我认为Encode模块使用编码处理这个问题,所以尝试这样做:
use Encode qw(decode);
my $decoded = decode("MIME-Header", $encoded);
use MIME::Words qw(:all);
$decoded = decode_mimewords(
'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>',
);