Guzzle、JSON 和 UTF-16

Guzzle, JSON and 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"

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

您可以从文档中注意到,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')
);