Guzzle,JSON和UTF-16

时间:2017-03-22 11:24:43

标签: json guzzle utf-16

我们正在使用Guzzle 6从Laravel 5应用程序向.NET API发出请求。

例如(不是真实的代码)

$response = Guzzle\Client->get('/utf16-endpoint');
$array = json_decode($response->getBody());

这会转换$array = null并再次使用

等其他变体
$array = json_decode((string) $response->getBody());

$array = json_decode($response->getBody()->getContent());

这些都最终返回null

我无法粘贴API响应,因为它会继续通过Gists,Pastebin等转换,所以我上传了一个响应作为.txt文件http://consolewatch.io/response.txt,如果你在sublime / atom等打开 - 它应显示为“UTF-16 LE”

什么是正确的方法(我们使用PHP7)从guzzle获取此响应并确保将JSON转换为包含对象的数组?

1 个答案:

答案 0 :(得分:1)

您可以从文档中注意到json_decode() works only with UTF-8 in PHP

所以你只需将你的回复转换为UTF-8就可以了:

$content = $response->getBody()->getContent();
$data = json_decode(
    mb_convert_encoding($content, 'UTF-8', 'UTF-16LE')
);