Dart 使用http.get.Flutter检索具有Utf-8字符集的无效阿拉伯字符
大家好,我正在尝试使用Dart 使用http.get.Flutter检索具有Utf-8字符集的无效阿拉伯字符,dart,flutter,Dart,Flutter,大家好,我正在尝试使用flatter,只要response.body中的所有字符都是英语,一切都很好,但我使用波斯语/阿拉伯语字符获得这些结果 链接到我正在测试的页面: (我还用其他URL测试了它,我的api也得到了同样的结果) 这是我的代码(我还尝试在文本小部件中显示结果): 这是我在android studio的日志: Performing hot reload... Reloaded 7 of 507 libraries in 1,333ms. I/flutter (23060): <
flatter
,只要response.body
中的所有字符都是英语,一切都很好,但我使用波斯语/阿拉伯语
字符获得这些结果
链接到我正在测试的页面:
(我还用其他URL测试了它,我的api也得到了同样的结果)
这是我的代码(我还尝试在文本小部件中显示结果)
:
这是我在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>
正在执行热重新加载。。。
在1333ms内重新加载了507个库中的7个。
I/颤振(23060):
I/颤振(23060):
I/颤振(23060):
I/颤振(23060):
I/颤振(23060):颤振
I/颤振(23060):
这部分是错误的:
虽然这是实际的文本:
在Android手机Xperia z3 plus(Android 6.0)上测试
使用Android studio:3.1.2
使用颤振:颤振窗口v0.3.2-beta版
在文本小部件中显示文本的结果:
web服务器的
内容类型
标题是内容类型:text/html
。请注意,它不包括字符集
后缀。应该是内容类型:text/html;字符集=utf-8
。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;
}
Future loadFarsi()异步{
最后答复=
等待http.get(“http://mobagym.com/media/mobagym-app-info/farsi.html");
字符串体=utf8.decode(response.bodyBytes);
印刷品(正文);
返回体;
}
为了简洁起见,您可以编写一个实用函数,如jsonDecodeUtf8
:
json_util.dart
dynamic jsonDecodeUtf8(List<int> codeUnits,
{Object reviver(Object key, Object value)}) =>
json.decode(utf8.decode(codeUnits), reviver: reviver);
我认为这是日志面板的问题(因为我也有这个问题),试着在widget中显示这些数据,然后在resulttried中显示这些内容,除了一些字符有点不同之外(我猜它们在我的android手机中不可用):
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;
}
dynamic jsonDecodeUtf8(List<int> codeUnits,
{Object reviver(Object key, Object value)}) =>
json.decode(utf8.decode(codeUnits), reviver: reviver);
String body = jsonDecodeUtf8(response.bodyBytes);