我正在尝试在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?=
,而在线encoder tool则显示其实际应为=?UTF-8?Q?=C3=84nderungen?=
。
当使用后一种编码手动构建主题字符串时,邮件主题将在我的电子邮件软件中正确显示“Änderungen”,因此问题似乎与实际的Perl编码命令有关。我正在尝试使用quoted-printable编码,但是通过MIME-B和MIME-Header编码也会导致“Ã?nderungen”的错误表示。
我确实检查了我的代码文件的文件格式,并且charset也以utf-8的形式返回。因此,我不知道为什么Perl显然是以错误的方式编码。我可能忽略了任何想法或事物?
答案 0 :(得分:4)
您的编辑器将文件视为UTF-8,因此显示
my $subject = "Änderungen";
Perl有效地将文件视为iso-8859-1,因此它看到了
my $subject = "Ã?nderungen";
告诉Perl您通过添加
使用UTF-8对脚本进行编码use utf8;
答案 1 :(得分:0)
在你的问题中,你宣布:
my $subject_encoded = encode("MIME-Q", $subject);
但你以后没有使用它。
print MAIL "Subject: $subject\n\n";
应该是:
print MAIL "Subject: $subject_encoded\n\n";