我从我的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
。
您应该在文档中注意以下详细信息:
如果可用,则使用header字段的
charset
参数从bodyBytes进行转换Content-Type
。如果不可用,或者编码名称未知,则默认使用latin1(根据RFC 2616)。
好吧,它似乎很可能无法弄清楚字符集,因此默认为latin1,它解释了您的响应如何混乱。
一种解决方案是使用resonse.bodyBytes
包含响应中原始字节的。然后,您可以使用例如,utf8.decode(resonse.bodyBytes)
如果您确定响应应解析为UTF-8来手动解析。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句