MAPI 字符集

适用于:Outlook 2013 | Outlook 2016

与 MAPI 兼容的客户端应用程序和服务提供商可以使用 ANSI 字符 (单字节) 或 Unicode 字符 (双字节) 。 不支持 OEM 字符集。 传递给 MAPI 方法或函数的 OEM 字符串将导致该方法或函数失败。 在将文件名传递给 MAPI 方法或函数之前,使用 OEM 字符集中文件名的客户端应用程序必须小心将它们转换为 ANSI。

对于客户端和服务提供商,支持 Unicode 字符集是可选的。 所有服务提供商都应编写其代码,以便无论它们是否支持 Unicode,都可以进行编译。 客户端按条件编译,具体取决于其支持级别,但服务提供商不会。 当字符集发生更改时,不应重新编译它们。 服务提供商代码中的任何内容都不应是有条件的。

当支持 Unicode 的客户端或服务提供商进行方法调用(将字符串作为输入或输出参数)时,会设置 MAPI_UNICODE 标志。 设置此标志会向实现指示所有传入字符串都是 Unicode 字符串。 在输出时,设置此标志会请求从实现传回的所有字符串都应是 Unicode 字符串(如果可能)。 支持 Unicode 的方法实现程序将符合请求;不提供 Unicode 支持的方法实现程序将不符合要求。 非 Unicode 格式的字符串属性的类型为 PT_STRING8。

MAPI 在头文件 MAPIDEFS 中定义 fMapiUnicode 常量。H 表示默认字符集。 如果客户端或服务提供程序支持 Unicode, 则 fMapiUnicode 设置为 MAPI_UNICODE。 不支持 Unicode 的客户端和服务提供商将 fMapiUnicode 设置为零。

不支持 Unicode 的服务提供商应:

  • 拒绝在字符集之间执行转换。

  • 切勿在方法调用中传递 MAPI_UNICODE 标志。

  • 传入MAPI_UNICODE标志时返回MAPI_E_BAD_CHARWIDTH。

  • 显式声明 ANSI 字符串属性。

当服务提供商仅支持 Unicode 且客户端不传递 MAPI_UNICODE 标志时,它们也可以返回MAPI_E_BAD_CHARWIDTH。

当前版本的 MAPI 支持以下方法中的 Unicode:

IAddrBook::Address

IAddrBook::CreateOneOff

IAddrBook::Details

IAddrBook::ResolveName

IMAPIProp::GetLastError (IAddrBook 实现仅)

对于这些方法,调用方可以预期任何返回的字符串为 Unicode 字符串。 从任何其他方法的 MAPI 实现返回的字符串将是 ANSI 字符串。