2010-03-19 2 views
2

나는 윈도우 모바일 MAPI를 통해 들어오는 전자 메일과 SMS를 처리하는 프로그램을 개발 중이다. 코드는 기본적으로 다음과 같이 표시됩니다.PR_BODY_A 태그 (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 ...  
    } 

작동하며 메시지 본문이 있습니다. 문제는이 본문이 멀티 바이트 인코딩이며 유니 코드 문자열을 반환해야한다는 것입니다. 아마도 MultiByteToWideChar() 함수를 사용해야합니다. 그러나 어떻게 적용해야합니까? 단순히 UTF8이 아니기 때문에 CP_UTF8을 사용하는 것은 순진합니다. CP_ACP를 사용하면 가끔은 좋지만 때때로 그렇지 않습니다. 그래서, 내 질문은 : 어떻게 메시지 코드 페이지에 대한 정보를 검색 할 수 있습니다. MAPI는 어떤 기능을 제공합니까? 또는 MultiByteToWideChar() 이외의 멀티 바이트 문자열을 디코딩 할 수있는 방법이 있습니까?

감사합니다.

답변

0

모바일에 대해 모르겠지만 PR_BODY_W를 사용할 수 있습니까? PR_RTF_COMPRESSED 속성이 있습니까? RTF 헤더에 코드 페이지가 들어 있습니다.

드미트리 Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - 아웃룩, CDO 및 MAPI 개발자 도구

+0

PR_BODY_W는 나에게 직접 유니 코드를 제공하며 사용할 수있을 때 아무런 문제가 없습니다. 나는 PR_BODY_A를 사용할 때 문제가있다. PR_RTF_COMPRESSED에 대해서는 조사해 보겠습니다. – SadSido

0

스티븐 그리핀에 대한 reading an RTF Stream을하여이 문서를 살펴 보자. HrTextFromCompressedRTFStreamEx을 사용하여 PR_RTF_COMPRESSED에서 UNICODE 텍스트로 직접 이동하는 방법을 설명합니다. Stephen이 "광고 한대로"작동하며 실제로 코드 페이지를 변경할 때 몇 가지 문제가 있습니다.

내 경험상 이런 유형의 문제는 지역 텍스트가 일상적으로 영어 텍스트가 산재 해있는 지역에서 나타납니다. 우리는 아시아 태평양 지역에서 이것을 보았습니다.

관련 문제