[英]Email subject MIME encoding in Perl.
我试图在Perl 5.8.5下的主题行中发送包含非ASCII字符的电子邮件。 我的简单示例使用了单词“Änderungen”(德语为umlaut),但未正确转换为“Ä”,主题行始终显示为“Ã?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;
在您的问题中,您声明:
my $subject_encoded = encode("MIME-Q", $subject);
但是您以后没有使用它。
print MAIL "Subject: $subject\n\n";
应该:
print MAIL "Subject: $subject_encoded\n\n";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.