gpt4 book ai didi

rest - Flutter 从服务器获取日语字符解码错误

转载 作者:IT老高 更新时间:2023-10-28 12:32:15 25 4
gpt4 key购买 nike

我正在使用 Flutter 构建一个移动应用程序。

我需要从服务器获取一个包含日文文本的 json 文件。返回的 json 的一部分是:

{
"id": "egsPu39L5bLhx3m21t1n",
"userId": "MCetEAeZviyYn5IMYjnp",
"userName": "巽 裕亮",
"content": "フルマラソン完走に対して2018/05/06のふりかえりを行いました!"
}

在 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);

logcat中print语句的结果是

{
id: egsPu39L5bLhx3m21t1n,
userId: MCetEAeZviyYn5IMYjnp,
userName: å·½ è£äº®,
content: ãã«ãã©ã½ã³å®èµ°ã«å¯¾ãã¦2018/05/06ã®ãµãããããè¡ãã¾ããï¼
}

注意只有日文字符(content键的值)变成乱码,其他非日文值仍然正常显示。

两个通知是:

  1. 如果我尝试通过 Text() 在我的应用程序中显示此日文文本,则会呈现相同的乱码,因此这不是 Android Studio 的 logcat 的错误。
  2. 如果我使用 Text('把一些日文文本直接放在这里') (ex: Text(' sleep ')),Flutter 会正确显示,所以是而不是弄乱日文字符的 Text 小部件。

最佳答案

如果您查看 postman,您可能会看到服务器发送的 Content-Type http header 缺少 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));

关于rest - Flutter 从服务器获取日语字符解码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51368663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com