【发布时间】:2021-11-08 04:36:47
【问题描述】:
在我的 Flutter 项目中,我使用这个函数来显示表情符号
String unicodeToString(String unified) {
return String.fromCharCodes(unified.split('-').map((e) {
return int.parse(e, radix: 16);
}));
}
然后,如果我用 Unicode 代码点列表调用它,它应该会吐出一个表情符号。
现在,在我的数据库(一个大 JSON)中,有几个表情符号无法在 iOS 上正确显示。
具体来说,kiss 和 Couple with heart emoji 似乎有些问题。
- 1F469-200D-2764-FE0F-200D-1F48B-200D-1F468(接吻女男)
- 1F468-200D-2764-FE0F-200D-1F48B-200D-1F468(接吻男人)
- 1F469-200D-2764-FE0F-200D-1F48B-200D-1F469(接吻女人女人)
- 1F469-200D-2764-FE0F-200D-1F468(情侣配心女男)
- 1F468-200D-2764-FE0F-200D-1F468(情侣配心男)
- 1F469-200D-2764-FE0F-200D-1F469(情侣配心女女)
如果我将其插入上述功能,
unicodeToString('1F469-200D-2764-FE0F-200D-1F48B-200D-1F469')
它在 iOS 上显示是这样的。
如果我使用软件键盘,搜索那个特定的表情符号并输入它,就会出现同样的问题。
代码笔:
https://codepen.io/johnnycook-the-bashful/pen/WNOOvOd
颤振 2.2.2, iOS 14.5
【问题讨论】:
-
我怀疑是你的显示逻辑。你怎么把它放在屏幕上?您是否以任何方式进一步解析返回的字符串?这些是双 ZWJ 表达式,您的解析器可能不理解这一点。 (解析器可能在 Flutter 中;我不知道 Flutter,但我知道 iOS 和 Unicode)。如果它与多个ZWJ有关,那么家庭表情符号也可能有问题。您应该测试 1F469-200D-1F469-200D-1F467-200D-1F466。它应该显示 ????????????????????。
-
我认为使用的逻辑工作正常。它只是将字符串转换为整数列表并从中显示字符。如果我只是使用 iOS 软件表情符号键盘并将字符放在那里而没有任何自定义逻辑,也会发生此问题。奇怪的是,所有“家庭”表情符号都有效。
-
顺便说一句,粘贴????❤️??????????在 Visual Studio Code 中以相同的方式分解(在 Electron 中;尽管它在 Slack 中也有效)。当您粘贴到 Xcode 或 SublimeText 时,它不会)。正如您所建议的,这与 unicodeToString 无关;如果您将表情符号本身替换为 codepen 代码中的字符串,也会发生同样的事情。这显然是 Flutter 本身的一个问题。 (如果你在 Flutter 问题列表中搜索 ZWJ,你会发现他们多年来遇到了很多问题。)
-
好的,谢谢你的建议。目前,我刚刚从 db 中删除了这六个表情符号。