【问题标题】:Flutter: Some emoji display incorrectly on iOSFlutter:一些表情符号在 iOS 上显示不正确
【发布时间】: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 中删除了这六个表情符号。

标签: ios flutter emoji


【解决方案1】:

我在 codepen 上检查了你的代码,一切都很完美。

这仅仅意味着 IOS 操作系统不支持该 Unicode。 目前没有解决方法,但以下是替代解决方案。

使用 pub 上的颤振表情选择器,它支持 Android 和 IOS。 那就是材料设计和库比蒂诺

https://pub.dev/packages/emoji_picker_flutter

【讨论】:

  • 为什么你认为 iOS 不支持这个表情符号?它可以在键盘中使用(我使用 SwiftUI 的测试可以毫无问题地显示这些)。我不知道 Flutter 如何处理 ZWJ 表情符号,但没有理由相信这是操作系统问题。
  • 不,iOS 支持那个表情符号。它甚至可以在不同的应用程序中正确显示。我已经尝试过提到的 emoji_picker_flutter 和其他包。到处都是同样的问题。我的猜测是 Flutter 本身会导致问题。是的,在 Android 和网络上都可以正常工作。
猜你喜欢
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-09
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多