[英]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.