如何在 PHP 中使用 COM 对象获取 UTF-8 字符串?

How to get UTF-8 string using COM object in PHP?

在我的 PHP 代码中,我从外部 DLL 实例化 COM 对象。它工作正常,除了我在从 com 对象方法之一接收 JSON 字符串时遇到问题。

如果字符串中没有任何非拉丁字符JSON我得到的是正确的,但是如果至少有一个非拉丁字符需要UTF-8编码,那么JSON从 COM 对象接收时在 PHP 中不可解析。 json_last_error() 显示 UTF-8 编码有问题。

我确信 COM 对象 returns 正确编码了字符串,因为它在其他环境中使用并且工作正常。

当我检查接收到的字符串内容时,很明显非拉丁字符以奇怪和无效的方式 "encoded"。当我在 COM 对象中检查相同的字符串时,就在它被发送到 PHP 之前,它被正确编码了。

似乎 PHP 到 COM 对象的通信是使用非 UTF-8 编码完成的,这弄乱了字符串。

我发现唯一与使用 UTF-8 和 COM 对象相关的是在 php.ini 的 [COM] 部分设置 com.code_page=UTF-8。但是,无论如何设置,我都有同样的不良行为。

我还应该如何从 COM 对象中获取正确编码的 UTF-8 字符串?

嗯,答案就在我眼前,我只是忽略了:

COM::__construct ( string $module_name [ mixed $server_name [ int $codepage [ string $typelib ]]] )

有代码页参数。如果设置为 CP_UTF8 它有效。

如果未使用服务器,

$server_name 应为 NULL。