我有一个表单的电子邮件主题:
=?utf-8?B?T3.....?=
电子邮件的正文是utf-8 base64编码 - 并且解码得很好.我目前正在使用Perl的Email :: MIME模块来解码电子邮件.
=?utf-8分隔符的含义是什么?如何从此字符串中提取信息?
所述encoded-word
令牌(按照RFC 2047)可以发生在某些标头的值.它们解析如下:
=?? ??=
在这种情况下,Charset是UTF-8,编码是B
指base64(另一个选项是Q
指Quoted Printable).
要阅读它,首先解码base64,然后将其视为UTF-8字符.
另请阅读各种Internet Mail RFC以获取更多详细信息,主要是RFC 2047.
由于您使用的是Perl,因此可以使用Encode :: MIME :: Header:
概要
use Encode qw/encode decode/; $utf8 = decode('MIME-Header', $header); $header = encode('MIME-Header', $utf8);抽象
该模块实现了RFC 2047 Mime Header Encoding.有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模块使用编码处理它MIME-Header
,所以试试这个:
use Encode qw(decode); my $decoded = decode("MIME-Header", $encoded);