使用 http.get Flutter 检索 Utf-8 字符集的无效阿拉伯字符

2024-03-27

嗨,我正在尝试从互联网获取数据 https://flutter.io/cookbook/networking/fetch-data/ in flutter并且只要其中的所有字符response.body是英语,一切都很好,但我得到这些结果persian/arabic人物。

链接到我正在测试的页面:http://mobagym.com/media/mobagym-app-info/farsi.html http://mobagym.com/media/mobagym-app-info/farsi.html(我还用其他网址对其进行了测试,我的 api 得到了相同的结果)

这是我的代码(我也尝试过在Text Widget):

static Future<String> loadFarsi() async{
    final response = await http.get("http://mobagym.com/media/mobagym-app-info/farsi.html",headers:{"charset":"utf-8","Accept-Charset":"utf-8"});
    print(response.body);
    return response.body;
  }

我尝试过删除标题,但仍然没有成功。

final response = await http.get("http://mobagym.com/media/mobagym-app-info/farsi.html");

这是我来自 android studio 的日志:

Performing hot reload...
Reloaded 7 of 507 libraries in 1,333ms.
I/flutter (23060): <html>
I/flutter (23060):     <head>
I/flutter (23060):         <meta charset="utf-8"/>
I/flutter (23060):     </head>
I/flutter (23060):     <body>سÙا٠ سÙا٠Ùر٠اÛپسÙÙ</body>
I/flutter (23060): </html>

这部分是错误的:Ø3Ùا٠Ø3Ùا٠Ùر٠اÛÙØØ3ÙÙ

尽管实际的文本是这样的:????????????????????????????????????????????????????

在 Android 手机 Xperia z3 plus (Android 6.0) 上进行测试

使用Android工作室:3.1.2

使用颤振:flutter_windows_v0.3.2-beta

结果显示文本小部件中的文本:


网络服务器的Content-Type标头是Content-Type: text/html。请注意,不包括charset后缀。应该是说Content-Type: text/html; charset=utf-8. The package:http当要求解码为字符时,客户端会查找此字符集。如果缺少,则默认为 LATIN1(不是 utf-8)。

正如您所看到的,在请求上设置标头并没有帮助,因为是由响应进行解码。幸运的是,有一个简单的修复方法。只需像这样自己将字节解码为字符串即可。

Future<String> loadFarsi() async {
  final response =
      await http.get("http://mobagym.com/media/mobagym-app-info/farsi.html");
  String body = utf8.decode(response.bodyBytes);
  print(body);
  return body;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 http.get Flutter 检索 Utf-8 字符集的无效阿拉伯字符 的相关文章

随机推荐