首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >飞镖/颤音中的表情符号与重音编码

飞镖/颤音中的表情符号与重音编码
EN

Stack Overflow用户
提问于 2020-08-12 16:38:07
回答 1查看 3.9K关注 0票数 4

我从我的api中得到下一个字符串

代码语言:javascript
复制
"à é í ó ú ü ñ \uD83D\uDE00\uD83D\uDE03\uD83D\uDE04\uD83D\uDE01\uD83D\uDE06\uD83D\uDE05"

来自json格式的响应。

代码语言:javascript
复制
{
    '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

到目前为止我已经试过了

代码语言:javascript
复制
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)

我怎样才能得到正确的文本与口音和表情符号?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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)手动解析这一点。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63381058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档