gpt4 book ai didi

flutter - dart/flutter 中的表情符号和重音编码

转载 作者:行者123 更新时间:2023-12-02 22:46:12 26 4
gpt4 key购买 nike

我从我的 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);

但产生一个

[错误:flutter/lib/ui/ui_dart_state.cc(166)] 未处理的异常:FormatException:无效的 UTF-8 字节(在偏移量 21 处)

如何获得带有重音符号和表情符号的正确文本?

最佳答案

根据您调用 response.body 的事实,我假设您使用的是 http 包,它在 上具有 body 属性>Response 对象。

您应该注意文档中的以下详细信息:

This is converted from bodyBytes using the charset parameter of the Content-Type header field, if available. If it's unavailable or if the encoding name is unknown, latin1 is used by default, as per RFC 2616.

好吧,它似乎很可能无法找出字符集,因此默认为 latin1,这解释了您的响应是如何搞砸的。

一个解决方案是使用 resonse.bodyBytes相反,它包含来自响应的原始字节。然后您可以使用例如手动解析它utf8.decode(resonse.bodyBytes) 如果您确定响应应该被解析为 UTF-8。

关于flutter - dart/flutter 中的表情符号和重音编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74039490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com