次の形式の電子メールの件名があります。
=?utf-8?B?T3.....?=
メールの本文は utf-8 base64 でエンコードされており、正常にデコードされています。現在、Perl の Email::MIME モジュールを使用して電子メールをデコードしています。
=?utf-8 区切り文字の意味と、この文字列から情報を抽出するにはどうすればよいですか?
encoded-word
トークン(RFC 2047による)は、一部のヘッダーの値で発生する可能性があります。それらは次のように解析されます。
=?<charset>?<encoding>?<data>?=
この場合、文字セットはUTF-8であり、エンコーディングはB
base64を意味します(他のオプションはQ
Quoted Printableを意味します)。
これを読み取るには、最初にbase64をデコードしてから、UTF-8文字として扱います。
詳細については、さまざまなインターネットメールRFC、主にRFC2047もお読みください。
Perlを使用しているので、Encode :: MIME::Headerが役立つ可能性があります。
概要
use Encode qw/encode decode/; $utf8 = decode('MIME-Header', $header); $header = encode('MIME-Header', $utf8);
概要
このモジュールは、RFC2047MIMEヘッダーエンコーディングを実装します。3つのバリアントエンコーディング名があります。MIME-Header、MIME-BおよびMIME-Q。違いは以下のとおりです
decode() encode() MIME-Header Both B and Q =?UTF-8?B?....?= MIME-B B only; Q croaks =?UTF-8?B?....?= MIME-Q Q only; B croaks =?UTF-8?Q?....?=
Encodeモジュールはそれをエンコーディングで処理すると思うMIME-Header
ので、これを試してください:
use Encode qw(decode);
my $decoded = decode("MIME-Header", $encoded);
RFC2047をチェックしてください。「B」は、最後の2つの「?」の間の部分がbase64でエンコードされていることを意味します。「utf-8」は当然、デコードされたデータがUTF-8として解釈される必要があることを意味します。
MIME:: MIME-tools からの単語もこれに適しています。Encode でいくつかの問題に遭遇し、MIME::Words が Encode では成功しなかったいくつかの文字列で成功したことを発見しました。
use MIME::Words qw(:all);
$decoded = decode_mimewords(
'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>',
);
これは、 RFC2047で指定されている、ヘッダーの文字セットラベル付けの標準拡張です。