VMime Book 日本語訳 第4章 4.8
2020-07-01 K.OHWADA
原文
VMime Book: A Developer’s Guide To VMime
https://www.vmime.org/public/documentation/book/vmime-book.pdf
第4章 基本
Basics
4.8 ヘッダーフィールドの非ASCIIテキスト
Non-ASCIItextinheaderfields
MIME標準では、特にヘッダーフィールドで、7ビットのみではないデータ(つまり、ASCII文字セット)を処理するためのmethods が定義されています。
たとえば、フィールド「Subject:」はこのデータ型を使用します
VMime は RFC-2047 と完全に互換性があり、8ビットデータを操作するための2つのオブジェクト vmime :: textとvmime :: word を提供します。
単語は、指定された文字セットでエンコードされたテキスト情報を表します。
テキストは1つ以上の単語で構成されます
RFC-2047は、8ビットデータを7ビット形式にエンコードするプロセスについて説明しています。
基本的に、Base64およびQuoted-Printableエンコーディングに依存しています。
うまくいけば、すべてのエンコード/デコードプロセスはVMimeによって内部的に行われるため、テキストオブジェクトの作成は非常に簡単です。
リスト4.12:vmime :: textオブジェクトの作成
Creating vmime::text objects
vmime::string inText = "Linux dans un =? UTF -8?B?dMOpbMOpcGhvbmUgbW9iaWxl ?=" ; ”Linux dans un tAclAcphone mobile”; vmime::charset inCharset = ”utf−8”; vmime::text outText; outText.createFromString(inText, inCharset); // ’outText’ now contains 3 words: // . <us−ascii> // . <utf−8> // . <us−ascii> ”Linux dans un ” ̃ ̃ ”tÄclAcphone ” ”mobile” vmime::shared ptr <vmime::header> header = myMessage−>getHeader(); header−>Subject()−>setValue(outText);
一般に、プロセスはVMimeで完全に透過的であるため、RFC-2047でエンコードされたデータをデコードする必要はありません。
本当に必要な場合は、vmime :: text :: decodeAndUnfold()静的メソッドを使用して、エンコードされたデータからテキストオブジェクトを作成できます。
たとえば、次のエンコードされたデータがあるとします。
次のコードを使用して簡単にデコードできます。
リスト4.13:RFC-2047でエンコードされたデータのデコード
Decoding RFC-2047-encoded data
vmime::string inData = ”Linux dans un =?UTF−8?B?dMOpbMOpcGhvbmUgbW9iaWxl?=”; vmime::text outText; vmime::text::decodeAndUnfold(inData, &outText);
vmime :: textは、1回の呼び出しですべての単語を別の文字セットに変換する関数も提供します。
次の例は、メッセージの件名フィールドに格納されているテキストを変換する方法を示しています。
リスト4.14:vmime :: textのデータを指定された文字セットに変換する
Converting data in a vmime::text to a specified charset
vmime::shared ptr <vmime::message> msg; // we have a message vmime::text subject = msg−>getHeader()->Subject()->getValue(); const vmime::string subjectText = subject.getConvertedText(vmime::charset("utf−8") ); // ’subjectText’ now contains the subject in UTF−8 encoding ``