次の形式のメールの件名があります。
=?utf-8?B?T3.....?=
電子メールの本文はutf-8base64でエンコードされており、正常にデコードされています。私は現在、PerlのEmail :: MIMEモジュールを使用して電子メールをデコードしています。
=?utf-8区切り文字の意味は何ですか?この文字列から情報を抽出するにはどうすればよいですか?
encoded-Word
トークン( RFC 2047 による)は、一部のヘッダーの値で発生する可能性があります。それらは次のように解析されます。
=?<charset>?<encoding>?<data>?=
この場合、文字セットはUTF-8であり、エンコーディングはB
で、base64を意味します(他のオプションはQ
で、Quoted Printableを意味します)。
これを読み取るには、最初にbase64をデコードしてから、UTF-8文字として扱います。
詳細については、主に RFC 2047 などのさまざまなインターネットメールRFCもお読みください。
Perlを使用しているので、 Encode :: MIME :: Header が役立つ可能性があります:
概要
use Encode qw/encode decode/; $utf8 = decode('MIME-Header', $header); $header = encode('MIME-Header', $utf8);
概要
このモジュールは、RFC 2047MIMEヘッダーエンコーディングを実装します。 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 :: Words MIMEツールからもこれに適しています。 Encodeで問題が発生し、Encodeが成功しなかった一部の文字列でMIME :: Wordsが成功したことがわかりました。
use MIME::Words qw(:all);
$decoded = decode_mimewords(
'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <[email protected]>',
);
これは、ヘッダーの文字セットラベル付けの標準拡張であり、 RFC2047 で指定されています。