【发布时间】:2020-08-12 16:38:07
【问题描述】:
我从我的 api 获得下一个字符串
"à é à ó ú ü ñ \uD83D\uDE00\uD83D\uDE03\uD83D\uDE04\uD83D\uDE01\uD83D\uDE06\uD83D\uDE05"
来自 json 格式的响应
{
'apiText': "à é à ó ú ü ñ \uD83D\uDE00\uD83D\uDE03\uD83D\uDE04\uD83D\uDE01\uD83D\uDE06\uD83D\uDE05",
'otherInfo': 'etc.',
.
.
.
}
它包含未正确编码的重音符号à é à ó ú ü ñ,它包含表情符号\uD83D\uDE00\uD83D\uDE03\uD83D\uDE04\uD83D\uDE01\uD83D\uDE06\uD83D\uDE05
到目前为止我已经尝试过
var json = jsonDecode(response.body)
String apiText = json['apiText'];
List<int> bytes = apiText.codeUnits;
comentario = utf8.decode(bytes);
但产生一个
[ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: FormatException: Invalid UTF-8 byte (at offset 21)
如何获得带有重音符号和表情符号的正确文本?
【问题讨论】:
-
你看过:pub.dev/packages/characters 吗?
-
另外,
apiText在您的代码中是什么类型? toString() 并没有真正意义,然后尝试将 codeUnits 解析为 UTF-8,因为来自String的 codeUnits 在 Dart 中是 UTF-16。 -
@julemand101 是字符串类型,我编辑了问题以显示类型
-
好的,所以
apiText确实包含您发布的带有反斜杠的文本? -
@julemand101 是的,我从 api ""à é à ó ú ü ñ \uD83D\uDE00\uD83D\uDE03\uD83D\uDE04\uD83D\uDE01\uD83D\uDE06 得到这个文本\uD83D\uDE05" " 但是 "à é à ó ú ü ñ " 实际上是带有重音符号 "Á é í ó ú ñ" 的字符,所以我对它们进行编码以获得实际文本,但在此过程中表情符号 ( "\uD83D\uDE00\uD83D ... ") 杀死编码。该 api 可以发送任何带有拉丁字符和表情符号的文本(它是一个评论系统,这就是我得到的,用户 cmets)