Как получить кодировку из сообщения MAPI с тегом PR_BODY_A (windows mobile)? - PullRequest
2 голосов
/ 19 марта 2010

Я разрабатываю программу, которая обрабатывает входящую электронную почту и смс через 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 ]

0 голосов
/ 26 марта 2010

Взгляните на эту статью Стивена Гриффина о чтении RTF Stream . Он объясняет, как вы можете перейти от PR_RTF_COMPRESSED напрямую к тексту UNICODE, используя HrTextFromCompressedRTFStreamEx. Он работает «как рекламируется» Стивеном и действительно имеет некоторые проблемы при изменении кодовой страницы.

По моему опыту, этот тип проблемы проявляется в регионах, где местный текст обычно перемежается с английским текстом. Мы видели это в Азиатско-Тихоокеанском регионе.

0 голосов
/ 23 марта 2010

Не знаете о мобильном телефоне, но доступен ли PR_BODY_W? У вас также есть свойство PR_RTF_COMPRESSED? он содержит кодовую страницу в заголовке RTF.

Дмитрий Стребленченко (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO и MAPI Developer Tool

...