我正在尝试在 Perl 5.8.5 下发送主题行中包含非 ASCII 字符的电子邮件。我的简单示例使用单词“änderungen”(德语元音变音),但主题行始终会显示为“änderungen”,而不是正确转换“ä”。
#!/usr/bin/env perl
use warnings;
use strict;
use Encode qw(decode encode);
my $subject = "Änderungen";
my $subject_encoded = encode("MIME-Q", $subject);
[...]
open(MAIL, "| /usr/sbin/sendmail -n -t $recipient") || return "ERROR";
print MAIL 'Content-Type: text/plain; charset="utf-8"\n';
print MAIL "To: $recipient\n";
print MAIL "From: $from\n";
print MAIL "Reply-To: $from\n";
print MAIL "Subject: $subject\n\n";
print MAIL "$body\n\n";
print MAIL ".\n";
close(MAIL);
$subject_encoded 的内容打印为=?UTF-8?Q?=C3=83=C2=84nderungen?=
当一个在线的编码器工具表明它实际上应该是=?UTF-8?Q?=C3=84nderungen?=
.
当使用后者编码手动构建主题字符串时,邮件主题将在我的电子邮件软件中正确显示“änderungen”,因此问题似乎出在实际的 Perl 编码命令上。我正在尝试使用引用的可打印编码,但是通过 MIME-B 和 MIME-Header 进行编码也会导致“änderungen”的错误表示。
我确实检查了代码文件的文件格式,并且字符集也返回为 utf-8。因此我不知道为什么 Perl 显然以错误的方式编码它。有什么想法或我可能忽略的事情吗?
您的编辑器将该文件视为 UTF-8,因此它显示
my $subject = "Änderungen";
Perl 有效地将文件视为 iso-8859-1,因此它看到
my $subject = "Ã?nderungen";
通过添加告诉 Perl 您使用 UTF-8 对脚本进行编码
use utf8;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)