在我的 PHP 代码中,我从外部 DLL 实例化 COM 对象。它工作正常,除了我从 com 对象方法之一接收 JSON 字符串时遇到问题。
如果字符串没有任何非拉丁字符 JSON 是正确的,但如果至少有一个非拉丁字符需要 UTF-8 编码,则从 COM 对象接收到的 JSON 在 PHP 中是不可解析的。json_last_error() 显示 UTF-8 编码有问题。
我很肯定 COM 对象返回正确编码的字符串,因为它在其他环境中使用并且工作正常。
当我检查收到的字符串内容时,很明显非拉丁字符以奇怪和无效的方式“编码”。当我在 COM 对象中检查相同的字符串时,就在它被发送到 PHP 之前,它被正确编码。
似乎 PHP 到 COM 对象的通信是使用非 UTF-8 编码完成的,这会弄乱字符串。
我发现与将 UTF-8 与 COM 对象一起使用的唯一事情是在 php.ini 的 [COM] 部分中设置 com.code_page=UTF-8。但是,无论如何设置,我都有同样的不良行为。
我还应该怎么做才能从 COM 对象中获取正确编码的 UTF-8 字符串?