我有一个非常基本的 php 代码,它生成一个包含一些数据的 JSON 文件:
$json = json_encode($theData, JSON_PRETTY_PRINT | JSON_FORCE_OBJECT | JSON_UNESCAPED_UNICODE);
file_put_contents('api.json', $json);
当我在我的 Flutter 应用程序中解析它时,它返回特殊字符而不是像“éóáêô”这样的字符。
我在 Flutter 中解析 json 文件是这样的:
var data = await http.get("xxxx/api.json", headers: {'Content-Type': 'application/json'});
if (data.statusCode == 200) {
print('Status Code 200: Ok!');
var jsonData = json.decode(data.body);
然后,我发现改变:
json.decode(data.body);
作者:
json.decode(utf8.decode(data.bodyBytes));
解决问题!
问题是:为什么使用 utf8.decode 和 bodyBytes 解决了这个问题?我是否正确地使用 PHP 创建了 JSON 文件?
您可以使用 Response.body
或
Response.bodyBytes
获取 http Response正文。使用 bodyBytes 的优点是它直接获取字节。如果您希望通过解析字节显示图像,则通常使用此方法。使用 body - 如果您需要纯字符串,则通常使用它。
由于您期望来自 http 响应的特殊字符,因此最好在使用之前直接获取其字节
utf8.decode()
json.decode(utf8.decode(data.bodyBytes));