Flutter 创建 API 请求并接收带有 - 'Ä' 'Ö' 'Ü' 'ß' 的字符串

Posted

技术标签:

【中文标题】Flutter 创建 API 请求并接收带有 - \'Ä\' \'Ö\' \'Ü\' \'ß\' 的字符串【英文标题】:Flutter create API Request and receive Strings with - 'Ä' 'Ö' 'Ü' 'ß'Flutter 创建 API 请求并接收带有 - 'Ä' 'Ö' 'Ü' 'ß' 的字符串 【发布时间】:2019-07-11 21:24:24 【问题描述】:

有没有一种简单的方法可以使用 Darts http - API(在 Flutter 中)在 API 中查询诸如“ä”、“ö”、“ü”之类的德语字母?

API 查询应该将 JSON 字符串下载到 Flutterapp。 不幸的是,json 字符串包含德语特殊字符。

String einleseURL = 'http://xxx.xxx.xxx.xxx/einlesen.json';
final ausgeleseneJsonString = await http.get(Uri.encodeFull(einleseURL));
uiUeberprueft = serializers.deserializeWith(
  RenderEbeneErste.serializer, json.decode(ausgeleseneJsonString.body));

我能想到的唯一解决方案是将 jSON 字符串转换为 utf-8 的数值,并将这个新文件保存在服务器上以进行 http 查询。 然后由 Flutter 调用数字列表并在 json.decode() 发生之前使用 utf.decode() 解密。

请参考: How can I convert string to utf8 in Dart?

有没有更简单的方法?

【问题讨论】:

对于 HTTP 请求,德语特殊字符没有什么特别之处。你得到的实际结果是什么? 尊敬的君特,感谢您的回复。例如,实际结果是:' "nutzerHilfe": "Beschreibung hinzufügen", '。此外,Flutter 中生成的 UI 看起来与控制台上的输出 debugPrint (ausgeleseneJsonString.body) 完全相同。 如果在浏览器中加载 URL 会得到什么?也许服务器发送的content-type 标头中的charset 部分不正确。也许字符串甚至不是 UTF-8 编码,而是其他编码? 查询通过计算机上的 IIS 运行。 .json 文件在 Notepad ++ 中编码为 utf-8。在浏览器中,即使在不同的设备上,字符串也能正确显示。 非常感谢。使用来自链接页面的稍微修改的源代码,它运行。谢谢!如果有人对源代码感兴趣,我喜欢发布。 【参考方案1】:

我使用了 Dart 的 build_value 序列化程序。 因此,如果 json.decode() 并且序列化成功,则从 JSON 字符串创建一个对象。

这段代码的最后一行解决了特殊字符的问题。

再次感谢!

//Objekte festlegen
RenderEbeneErste uiUeberprueft;

//jSON auslesen, prüfen & Objekt erstellen
String jsonURL = 'http://xxx.xxx.xxx.xxx/eingeleseneJSON.json';
final ausgeleseneDaten = await http.get(Uri.parse(jsonURL));
uiUeberprueft = serializers.deserializeWith(
  RenderEbeneErste.serializer, json.decode(utf8.decode(ausgeleseneDaten.bodyBytes)));

【讨论】:

使用 http.dart 包 json.decode(utf8.decode(response.bodyBytes) 有效!!

以上是关于Flutter 创建 API 请求并接收带有 - 'Ä' 'Ö' 'Ü' 'ß' 的字符串的主要内容,如果未能解决你的问题,请参考以下文章

flutter 网络请求dio的简单使用以及请求头参数的自定义

Flutter HTTP 请求使用 Basic Auth + 传递用户和密码来接收用户数据

无法使用带有工作 api 的 http.get flutter 获取数据

Dart/Flutter POST 请求和流响应

提交带有动态创建的表单输入的 json 请求

Flutter 中的 API 调用在第一次加载应用程序时不会加载所需的 JSON - Flutter