MIME::QuoterdPrint 解码 perl 脚本中除空格以外的所有内容
MIME::QuoterdPrint decodes everything but whitespaces in perl script
我正在用 Perl 的 Net::IMAP::Simple 模块编写一个简单的 imap 客户端。
我想在标准输出上打印消息主题。该主题在 Quoted-Printables 中编码,因此我必须使用 MIME::QuotedPrint decode_qp() 函数对其进行解码。
一切都打印得很好,除了空格,它们保持编码,我不知道为什么。现在的输出如下所示:
[073] =?UTF-8?Q?[Myawesome_subject_topic]?= =?UTF-8?Q?_Сообщение?= =?UTF-8?Q?_номер?=
如您所见,空格位于 ?= 和 =?UTF-8?Q?_ 'tags' 之间。
不确定如何与他们打交道。相关部分的代码如下
my $nm = $imap->select('INBOX');
for (my $i = 1; $i <= $nm; $i++) {
if ($imap->seen($i)) {
print '*';
}
else {
print " ";
}
my $es = Email::Simple->new(join '', @{ $imap->top($i) } );
my $decoded = $es->header('Subject');
$decoded = decode_qp($decoded);
printf("[%03d] %s\n", $i, $decoded);
}
更新和解决方案
使用 Encode 模块代替 MIME::QuotedPrint
use Encode qw(decode);
像这样解码主题
$decoded = decode("MIME-Header", $encoded);
下面已接受的答案中有关该主题的其他信息
您不能使用 quoted-printable 简单地解码完整的主题值,因为没有对完整的主题进行编码。如果你有类似
Subject: =?UTF-8?Q?AAAAAAAA?= =?UTF-8?Q?BBBBBBBB?=
您必须分别获取每个 =?CHENC?Q?ENCODED?=
,将 ENCODED
部分解码为可打印引用,然后根据字符编码 CHENC
(即 UTF-8在您的具体情况下)。完成后用解码数据替换整个 =?...?=
部分。
有关详细信息,请参阅 RFC 2047. For an existing implementation in Perl see for example Encode::MIME::Header. See also Decode an UTF8 email header。
我正在用 Perl 的 Net::IMAP::Simple 模块编写一个简单的 imap 客户端。 我想在标准输出上打印消息主题。该主题在 Quoted-Printables 中编码,因此我必须使用 MIME::QuotedPrint decode_qp() 函数对其进行解码。 一切都打印得很好,除了空格,它们保持编码,我不知道为什么。现在的输出如下所示:
[073] =?UTF-8?Q?[Myawesome_subject_topic]?= =?UTF-8?Q?_Сообщение?= =?UTF-8?Q?_номер?=
如您所见,空格位于 ?= 和 =?UTF-8?Q?_ 'tags' 之间。 不确定如何与他们打交道。相关部分的代码如下
my $nm = $imap->select('INBOX');
for (my $i = 1; $i <= $nm; $i++) {
if ($imap->seen($i)) {
print '*';
}
else {
print " ";
}
my $es = Email::Simple->new(join '', @{ $imap->top($i) } );
my $decoded = $es->header('Subject');
$decoded = decode_qp($decoded);
printf("[%03d] %s\n", $i, $decoded);
}
更新和解决方案
使用 Encode 模块代替 MIME::QuotedPrint
use Encode qw(decode);
像这样解码主题
$decoded = decode("MIME-Header", $encoded);
下面已接受的答案中有关该主题的其他信息
您不能使用 quoted-printable 简单地解码完整的主题值,因为没有对完整的主题进行编码。如果你有类似
Subject: =?UTF-8?Q?AAAAAAAA?= =?UTF-8?Q?BBBBBBBB?=
您必须分别获取每个 =?CHENC?Q?ENCODED?=
,将 ENCODED
部分解码为可打印引用,然后根据字符编码 CHENC
(即 UTF-8在您的具体情况下)。完成后用解码数据替换整个 =?...?=
部分。
有关详细信息,请参阅 RFC 2047. For an existing implementation in Perl see for example Encode::MIME::Header. See also Decode an UTF8 email header。