我从我的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.',
.
.
.
}它包含未正确编码的口音à é à ó ú ü ñ,并包含emojis \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)
我怎样才能得到正确的文本与口音和表情符号?
发布于 2020-08-12 18:33:15
基于您调用response.body的事实,我假设您使用的是http包,该包在Response对象上具有body属性。
您应该在文档中注意到以下细节:
--如果可用,则使用
Content-Type标头字段的charset参数从Content-Type转换而来。如果它不可用或编码名称未知,则默认使用latin1,如RFC 2616所示。
嗯,它似乎很可能找不出字符集,因此默认为latin1,这解释了您的响应是如何被搞砸的。
解决方案之一是使用resonse.bodyBytes,它包含来自响应的原始字节。然后,如果您确定响应应该解析为UTF-8,则可以使用例如utf8.decode(resonse.bodyBytes)手动解析这一点。
https://stackoverflow.com/questions/63381058
复制相似问题