我正在开发一个程序,通过 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()之外,还有其他方法可以解码多字节字符串吗?
谢谢!