25

次の形式の電子メールの件名があります。

=?utf-8?B?T3.....?=

メールの本文は utf-8 base64 でエンコードされており、正常にデコードされています。現在、Perl の Email::MIME モジュールを使用して電子メールをデコードしています。

=?utf-8 区切り文字の意味と、この文字列から情報を抽出するにはどうすればよいですか?

4

5 に答える 5

40

encoded-wordトークン(RFC 2047による)、一部のヘッダーの値で発生する可能性があります。それらは次のように解析されます。

=?<charset>?<encoding>?<data>?=

この場合、文字セットはUTF-8であり、エンコーディングはBbase64を意味します(他のオプションはQQuoted 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?....?=
于 2008-09-24T08:51:41.087 に答える
17

Encodeモジュールはそれをエンコーディングで処理すると思うMIME-Headerので、これを試してください:

use Encode qw(decode);
my $decoded = decode("MIME-Header", $encoded);
于 2008-09-24T08:57:18.453 に答える
3

RFC2047をチェックしてください。「B」は、最後の2つの「?」の間の部分がbase64でエンコードされていることを意味します。「utf-8」は当然、デコードされたデータがUTF-8として解釈される必要があることを意味します。

于 2008-09-24T08:55:50.203 に答える
2

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>',
);
于 2014-02-21T02:07:15.890 に答える
1

これは、 RFC2047で指定されている、ヘッダーの文字セットラベル付けの標準拡張です。

于 2008-09-24T08:55:55.430 に答える