我正在使用Flutter构建移动应用程序。
我需要json从服务器中获取包含日语文本的文件。返回的一部分json是:
json
{ "id": "egsPu39L5bLhx3m21t1n", "userId": "MCetEAeZviyYn5IMYjnp", "userName": "巽 裕亮", "content": "フルマラソン完走に対して2018/05/06のふりかえりを行いました!" }
在邮递员或chrome上尝试相同的请求将获得预期的结果(日语字符在输出中正确呈现)。
但是,通过以下代码段使用Dart提取数据时:
import 'dart:convert'; import 'package:http/http.dart' as http; //irrelevant parts have been omitted final response = await http.get('SOME URL',headers: {'Content-Type': 'application/json'}); final List<dynamic> responseJson = json.decode(response.body) print(responseJson);
printlogcat中语句的结果是
print
{ id: egsPu39L5bLhx3m21t1n, userId: MCetEAeZviyYn5IMYjnp, userName: å·½ è£äº®, content: ãã«ãã©ã½ã³å®èµ°ã«å¯¾ãã¦2018/05/06ã®ãµãããããè¡ãã¾ããï¼ }
请注意,只有日语字符(content键的值)变成乱码,其他非日语值仍然可以正确显示。
content
有两个注意事项:
Text()
Text('put some Japanese text here directly')
Text('睡眠')
Text
如果查看邮递员,您可能会看到Content-Type服务器发送的http标头缺少该encoding标记。这会导致Dart http客户端将主体解码为Latin-1而不是utf-8。有一个简单的解决方法:
Content-Type
encoding
http.Response response = await http.get('SOME URL',headers: {'Content-Type': 'application/json'}); List<dynamic> responseJson = json.decode(utf8.decode(response.bodyBytes));