2013-06-13 7 views
6

これは愚かな質問かもしれませんが...ここに行く!余分な '='(==?utf-8?b?base64string?=)のMimeでエンコードされたヘッダー

私は独自のMIMEパーサーをネイティブC++で作成しました。エンコードの悪夢です!この3ヶ月間安定していましたが、最近私はこれに気付きましたSubject: header。これにデコードする必要があります

Subject: =?UTF-8?B?T2ZpY2luYSBkZSBJbmZvcm1hY2nDs24sIEluaWNpYXRpdmFzIHkgUmVjbGFt?===?UTF-8?B?YWNpb25lcw==?= 

Subject: Oficina de Información, Iniciativas y Reclamaciones 

問題は、私は2 (なぜ2?)エンコードされた要素を結合把握することはできませんそこに1つの余分= (equal)ありですなぜ分かれているのか分かりません。理論的には、フォーマットは=?charset?encoding?encoded_string?=でなければなりませんが、2つの=で始まる別のサブジェクトが見つかりました。私は余分な=をどのように処理するかを

==?UTF-8?B?blahblahlblah?= 

私は何も(と、それは動作します)を行う前=?==?(私は)に取って代わる可能性が...しかし、私はこれについて、仕様のいずれかの種類がありますので、もし、私はハックしていない思ったんだけど適切な機能に私の方法。

PSどのように私はこれらの遺物のプロトコルを憎む!すべてのテキスト通信はUTF-8とXMLでなければなりません:)

答えて

2

MIMEヘッダーでは、エンコードされた単語が使用されます(RFC 2047セクション2)。

...(理由2?)

ため78行の長さ制限のある75の符号化ワードの制限を克服する(あるいは、例えば中国語、ポーランドのような2つの異なるエンコーディングを使用します) 。

RFC 2047:

アン '符号化単語' が75以上の文字ではないかもしれない、 '文字セット'、 '符号化'、 '符号化されたテキスト'、およびデリミタを含みます。 の「encoded-word」が75文字に収まるよりも多くのテキストをエンコードすることが望ましい場合、複数のencoded-wordの (CRLF SPACEで区切られた)を使用できます。

はここ(注意NO '=' が間に存在しない)RFC2047からの例です:

Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?= 
    =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?= 

としてあなたの主題をデコードする必要があります。mraq答えが間違ってい

"Oficina de Información, Iniciativas y Reclam=aciones" 

。ソフト改行は、MIME本文で使用できる「引用印刷可能なContent-Transfer-Encodingのみ」に適用されます。

0

私がMIME RFCで見ることができるように、二重等号は有効な入力(エンコード用)ではありませんが、最初の等号を何次のものを使用してデコードします。しかし真剣に言えば、それらの余分な等号は、おそらく誤ったエンコーダからのアーチファクトのように見えます。

+0

私もそうだと思います。私はさまざまな情報源からの5つの電子メールでそれらを見て、それが私が行方不明だったと思った。そしてSOよりも頼りになる場所は?) – CodeAngry

0

ソフト折れ線」と呼ばれ、SMTPプロトコルの継承です。 RFC2045

(ソフト改行)の20ページを引用

引用-printableエンコーディング は、符号化されたラインが長いせいぜい76の 文字はならないことを要求します。長い行が符号付き印刷可能エンコーディングで にエンコードされる場合は、「ソフト」改行 を使用する必要があります。 エンコードされた行の最後の文字と等号は、エンコードされたテキストに改行記号 " "のような意味のない( "ソフト")を示します。

Wikipedia on Quoted-printable

ソフト改行はエンコードされたライン、 の末尾に「=」で構成され、デコードされたテキストに改行として表示されません。

+2

この回答は間違っています。 「Quoted Printable」Content-Transfer-Encoding(RFC 2045)と「Q-encoded」エンコードされた単語(RFC 2047)を混同しています。上記の対象は、 "Oficina deInformación、Iniciativas y Reclam = aciones" –

関連する問題