Tra*_*iet 10 rest cjk dart flutter
我正在用Flutter构建一个移动应用程序.
我需要json从服务器获取包含日文文本的文件.返回的一部分json是:
{
"id": "egsPu39L5bLhx3m21t1n",
"userId": "MCetEAeZviyYn5IMYjnp",
"userName": "? ??",
"content": "????????????2018/05/06?????????????"
}
Run Code Online (Sandbox Code Playgroud)
在postman或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);
Run Code Online (Sandbox Code Playgroud)
printlogcat 中的语句结果是
{
id: egsPu39L5bLhx3m21t1n,
userId: MCetEAeZviyYn5IMYjnp,
userName: å·½ è£äº®,
content: ãã«ãã©ã½ã³å®èµ°ã«å¯¾ãã¦2018/05/06ã®ãµãããããè¡ãã¾ããï¼
}
Run Code Online (Sandbox Code Playgroud)
请注意,只有日文字符(content键的值)变为乱码,其他非日语值仍然正确显示.
两个通知是:
Text()则会呈现相同的乱码,因此这不是Android Studio的logcat的错误.Text('put some Japanese text here directly')(例如Text('??'):),Flutter会正确显示它,因此不是Text小部件会弄乱日文字符.Ric*_*eap 25
如果您查看邮递员,您可能会看到Content-Type服务器发送的http标头缺少encoding标签.这会导致Dart http客户端将主体解码为Latin-1而不是utf-8.有一个简单的解决方法:
http.Response response = await http.get('SOME URL',headers: {'Content-Type': 'application/json'});
List<dynamic> responseJson = json.decode(utf8.decode(response.bodyBytes));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3231 次 |
| 最近记录: |