我从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)
如何获得带有重音符号和表情符号的正确文本?
答案 0 :(得分:0)
基于您称为response.body
的事实,我假设您使用的http
包在body
对象上确实具有Response
属性。
您应该在文档中注意以下细节:
使用
charset
标头字段的Content-Type
参数从bodyBytes进行转换(如果有)。如果不可用或编码名称未知,则默认使用latin1(根据RFC 2616)。
好吧,它很可能无法弄清楚字符集,因此默认为latin1,它解释了您的响应是如何弄乱的。
一个解决方案是使用resonse.bodyBytes
代替,它包含响应中的原始字节。然后,您可以使用手动解析utf8.decode(resonse.bodyBytes)
,如果您确定应将响应解析为UTF-8。