You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MIME::QuotedPrint编码异常,请问我哪里操作有误?

问题分析与解决

为什么会输出Imported today=?

首先,Quoted-Printable编码的核心规则是仅对非可打印ASCII字符、空格、以及=本身进行编码,可打印的ASCII字符(字母、数字、大部分符号)会直接保留,不会转成=XX的形式。

你看到的结尾=,是因为encode_qp默认会对输出进行行折叠(默认行宽76字符),若字符串长度接近行宽末尾,会用=作为软换行标记。不过你的字符串长度很短,这个等号更可能是打印格式问题或特定模块版本的行为,但核心问题是你误解了Quoted-Printable的编码逻辑——它不会对所有字符做全编码。

如何得到全=XX形式的编码?

如果你的需求是把所有字符都编码成=XX的十六进制形式,MIME::QuotedPrint默认做不到(它遵循标准规范),你可以自己实现这个逻辑:

my $decoded = "Imported today";
my $encoded = join '', map { sprintf "=%02X", ord($_) } split //, $decoded;
print "\n$encoded\n";

这段代码会输出=49=6D=70=6F=72=74=65=64=20=74=6F=64=61=79,符合你想要的全编码形式。

如果你只是想去掉结尾的=

如果你的需求只是正常的Quoted-Printable编码,不想要多余的=,可以给encode_qp传递参数禁用行折叠:

$encoded = encode_qp($decoded, "\n", 1); # 第三个参数启用binmode,禁用行折叠

这样输出的就是Imported today,符合标准Quoted-Printable编码结果。

内容的提问来源于stack exchange,提问作者Steve Waring

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 07:12:15