簡體   English   中英

Perl中的電子郵件主題MIME編碼。

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM