2

私は、Windows-MobileMAPIを介して受信メールとSMSを処理するプログラムを開発しています。コードは基本的に次のようになります。

   ulBodyProp = PR_BODY_A;
   hr = piMessage->OpenProperty(ulBodyProp, NULL, STGM_READ, 0, (LPUNKNOWN*)&piStream);

   if (hr == S_OK)
   {
      // ... get body size in bytes ...
      STATSTG statstg;
      piStream->Stat(&statstg, 0);
      ULONG cbBody = statstg.cbSize.LowPart;

      // ... allocate memory for the buffer ...
      BYTE* pszBodyInBytes = NULL;
      boost::scoped_array<BYTE> szBodyInBytesPtr(pszBodyInBytes = new BYTE[cbBody+2]);

      // ... read body into the pszBodyInBytes ...      
   }

それはうまくいき、私はメッセージ本文を持っています。問題は、この本体がマルチバイトエンコードされており、Unicode文字列を返す必要があることです。:: MultiByteToWideChar()関数を使用する必要があると思いますが、どのコードページを適用すればよいのでしょうか。CP_UTF8の使用は、UTF8に含まれていない可能性があるため、単純です。CP_ACPの使用は、うまくいくこともありますが、うまくいかないこともあります。したがって、私の質問は、メッセージコードページに関する情報を取得するにはどうすればよいかということです。MAPIはそのための機能を提供しますか?または、MultiByteToWideChar()以外のマルチバイト文字列をデコードする方法はありますか?

ありがとう!

4

2 に答える 2

0

モバイルはわかりませんが、PR_BODY_W は利用できますか? PR_RTF_COMPRESSED プロパティもありますか? RTF ヘッダーにコード ページが含まれています。

Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook、CDO、および MAPI 開発者ツール

于 2010-03-22T21:20:59.313 に答える
0

RTF ストリームの読み取りについては、Stephen Griffin によるこの記事を参照してください。を使用して PR_RTF_COMPRESSED から UNICODE テキストに直接移動する方法について説明しますHrTextFromCompressedRTFStreamEx。これは、Stephen によって「宣伝されているとおり」に機能し、コード ページを変更するときに実際にいくつかの問題があります。

私の経験では、この種の問題は、ローカル テキストに英語のテキストが日常的に散在している地域で発生する傾向があります。これはアジア太平洋地域で見られました。

于 2010-03-26T09:55:43.017 に答える