Perl 解码UTF8电子邮件标题

Perl 解码UTF8电子邮件标题,perl,email,utf-8,header,Perl,Email,Utf 8,Header,我有一个表格的电子邮件主题: =?utf-8?B?T3.....?= 电子邮件的正文是utf-8 base64编码的,并且解码得很好。 我目前正在使用Perl的Email::MIME模块对电子邮件进行解码 =?utf-8分隔符的含义是什么?如何从该字符串中提取信息?标记(按)可以出现在某些标题的值中。它们的分析如下: =?<charset>?<encoding>?<data>?= 摘要 此模块实现RFC 2047 Mime 标题编码。有3种变体 名称编码;

我有一个表格的电子邮件主题:

=?utf-8?B?T3.....?=
电子邮件的正文是utf-8 base64编码的,并且解码得很好。 我目前正在使用Perl的Email::MIME模块对电子邮件进行解码

=?utf-8分隔符的含义是什么?如何从该字符串中提取信息?

标记(按)可以出现在某些标题的值中。它们的分析如下:

=?<charset>?<encoding>?<data>?=
摘要

此模块实现RFC 2047 Mime 标题编码。有3种变体 名称编码;MIME头文件,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?....?=

退房。“B”表示最后两个“?”之间的部分是base64编码的。“utf-8”自然意味着解码后的数据应解释为utf-8。

这是中指定的头字符集标签的标准扩展。

我认为编码模块使用
MIME头
编码来处理这一点,所以请尝试以下方法:

use Encode qw(decode);
my $decoded = decode("MIME-Header", $encoded);
从MIME工具的工作也很好,这一点。我在Encode方面遇到了一些问题,并发现在Encode没有成功的一些字符串上MIME::Word成功

use MIME::Words qw(:all);
$decoded = decode_mimewords(
    'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>',
);
使用MIME::Words qw(:all);
$decoded=decode\u mimewords(
'收件人:=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?=',
);

这很有帮助,谢谢。顺便说一句,如果其他人在编写邮件脚本时正在阅读,我还使用了print encode('utf-8',$headers\u decoded)来正确显示解码的头。
use MIME::Words qw(:all);
$decoded = decode_mimewords(
    'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>',
);