【发布时间】:2018-04-18 15:14:14
【问题描述】:
在我的 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 字符串?
【问题讨论】:
标签: php string encoding utf-8 com-object