代码之家  ›  专栏  ›  技术社区  ›  SadSido

如何从带有pr_body_a标记的MAPI邮件中获取编码(Windows Mobile)?

  •  2
  • SadSido  · 技术社区  · 14 年前

    我正在开发一个程序,它通过windows mobile mapi处理传入的电子邮件和短信息。代码基本上是这样的:

       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()之外,还有其他方法可以解码多字节字符串吗?

    谢谢!

    2 回复  |  直到 13 年前
        1
  •  0
  •   user269730    14 年前

    不知道手机,但有没有公关机构? 你也有pr_rtf_compressed属性吗?它包含rtf头中的代码页。

    德米特里·斯特雷布列琴科(MVP) http://www.dimastr.com/ 了望间谍-了望,CDO 和MAPI开发工具

        2
  •  0
  •   Paul Arnold    14 年前

    看看史蒂芬·格里芬的这篇文章 reading an RTF Stream . 它解释了如何使用 HrTextFromCompressedRTFStreamEx . 它的工作方式“正如斯蒂芬所宣传的那样”,并且在更改代码页时确实存在一些问题。

    根据我的经验,这种类型的问题往往表现在当地文本通常与英语文本混杂的地区。我们在亚太地区看到了这一点。