dart/flutter 中的表情符号和重音编码

lin*_*ngo 6 dart flutter

我从我的 api 获取下一个字符串

\n
"\xc3\x83 \xc3\x83\xc2\xa9 \xc3\x83\xc2\xad \xc3\x83\xc2\xb3 \xc3\x83\xc2\xba \xc3\x83\xc2\xbc \xc3\x83\xc2\xb1 \\uD83D\\uDE00\\uD83D\\uDE03\\uD83D\\uDE04\\uD83D\\uDE01\\uD83D\\uDE06\\uD83D\\uDE05"\n
Run Code Online (Sandbox Code Playgroud)\n

来自 json 格式的响应

\n
{\n    'apiText': "\xc3\x83 \xc3\x83\xc2\xa9 \xc3\x83\xc2\xad \xc3\x83\xc2\xb3 \xc3\x83\xc2\xba \xc3\x83\xc2\xbc \xc3\x83\xc2\xb1 \\uD83D\\uDE00\\uD83D\\uDE03\\uD83D\\uDE04\\uD83D\\uDE01\\uD83D\\uDE06\\uD83D\\uDE05",\n    'otherInfo': 'etc.',\n    .\n    .\n    .\n}\n
Run Code Online (Sandbox Code Playgroud)\n

它包含\xc3\x83 \xc3\x83\xc2\xa9 \xc3\x83\xc2\xad \xc3\x83\xc2\xb3 \xc3\x83\xc2\xba \xc3\x83\xc2\xbc \xc3\x83\xc2\xb1未正确编码的重音并且包含表情符号\\uD83D\\uDE00\\uD83D\\uDE03\\uD83D\\uDE04\\uD83D\\uDE01\\uD83D\\uDE06\\uD83D\\uDE05

\n

到目前为止我已经尝试过

\n
var json = jsonDecode(response.body)\nString apiText = json['apiText'];\nList<int> bytes = apiText.codeUnits;\ncomentario = utf8.decode(bytes);\n
Run Code Online (Sandbox Code Playgroud)\n

但产生一个

\n

[ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: FormatException: Invalid UTF-8 byte (at offset 21)

\n

如何获得带有重音符号和表情符号的正确文本?

\n

jul*_*101 14

根据您致电的事实,response.body我假设您使用的http包确实具有对象body的属性Response

您应该注意文档中的以下详细信息:

charset这是使用标头字段的参数(如果可用)从 bodyBytes 转换而来的Content-Type。如果不可用或编码名称未知,则根据 RFC 2616 默认使用 latin1。

好吧,它似乎很可能无法找出字符集,因此默认为 latin1,这解释了您的响应是如何混乱的。

解决方案是使用resonse.bodyBytes包含响应中的原始字节的 。utf8.decode(resonse.bodyBytes)然后,如果您确定响应应解析为 UTF-8,则可以使用例如手动解析此内容。