如何编码在Perl邮件主题?
现在我终于找到了,但它仍然没有工作:
use MIME::Words qw/encode_mimewords/;
$recipientsubject = encode_mimewords('Votre fichier a bien été envoyé');
但是,(窃听)的结果是:
主题:您的文件= ISO-8859-1 e9t Q = = = = E9 ISO-8859-1发送Q = E9 = ????????
其中显示:
您的档案有étéenvoyé
(它吃一些空格)
使用编码 ,这是一个核心模块。
perl -Mutf8 -MEncode -E 'say encode("MIME-Header", "Votre fichier a bien été envoyé")'
......将输出两种之一:
=?UTF-8?Q?Votre=20fichier=20a=20bien=20?= =?UTF-8?Q?=C3=A9t=C3=A9=20envoy=C3=A9?=
=?UTF-8?B?Vm90cmUgZmljaGllciBhIGJpZW4gw6l0w6kgZW52b3nDqQ==?=
和解码用:
perl -C -MEncode -E 'say decode("MIME-Header", "=?UTF-8?Q?Votre=20fichier=20a=20bien=20?= =?UTF-8?Q?=C3=A9t=C3=A9=20envoy=C3=A9?=")'
perl -C -MEncode -E 'say decode("MIME-Header", "=?UTF-8?B?Vm90cmUgZmljaGllciBhIGJpZW4gw6l0w6kgZW52b3nDqQ==?=")'
这将打印:
Votre fichier a bien été envoyé
如果你仍然有同样的结果,你应该给你的Perl环境的更多信息。 该版本是一个很好的入门。
它处理非ASCII字符串的MIME编码另一个模块是电子邮件:: MIME :: RFC2047 。 例如
use strict;
use warnings;
use utf8;
use Email::MIME::RFC2047::Encoder;
use Email::MIME::RFC2047::Decoder;
binmode(STDOUT, ':utf8');
my $encoder = Email::MIME::RFC2047::Encoder->new;
my $encoded = $encoder->encode_text('Votre fichier a bien été envoyé');
print "$encoded\n";
my $decoder = Email::MIME::RFC2047::Decoder->new;
my $decoded = $decoder->decode_text($encoded);
print "$decoded\n";
版画
Votre fichier a bien =?utf-8?Q?=c3=a9t=c3=a9_envoy=c3=a9?=
Votre fichier a bien été envoyé
电子邮件:: MIME的一些好处:: RFC2047在编码:
- 它力图也由短语使用引号的字符串使用MIME编码为几句话越好。
- 它支持在要使用的,从MIME短语或抄送标题(不可能与编码)的正确解码。
- 它支持其他字符集不是UTF-8。
- 如在MIME-Q编码字下划线它编码空间。
- 它具有比编码的错误少(没有,我所知道的)。
披露:我是模块的作者。