如何解决飞镖/颤振中的表情符号和重音编码
我从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)
如何获得带有重音符号和表情符号的正确文本?
解决方法
基于您称为response.body
的事实,我假设您使用的http
包在body
对象上确实具有Response
属性。
您应该在文档中注意以下细节:
使用
charset
标头字段的Content-Type
参数从bodyBytes进行转换(如果有)。如果不可用或编码名称未知,则默认使用latin1(根据RFC 2616)。
好吧,它很可能无法弄清楚字符集,因此默认为latin1,它解释了您的响应是如何弄乱的。
一个解决方案是使用resonse.bodyBytes
代替,它包含响应中的原始字节。然后,您可以使用手动解析utf8.decode(resonse.bodyBytes)
,如果您确定应将响应解析为UTF-8。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。