【问题标题】:Regional flag emoji support for unicode in SwiftSwift 中对 unicode 的区域标志表情符号支持
【发布时间】:2019-01-20 12:10:54
【问题描述】:

我的问题是

我如何使用地区旗 ex) 加利福尼亚州旗(地区旗)

可以使用苹果键盘的一些区域标志(gbeng,gbzet,gbwls ...)

我用过这样的unicode序列

let califonia = "\u{1F3F3}\u{E0075}\u{E0073}\u{E0063}\u{E0061}\u{E007F}"
print(califonia) // ????

根据这些链接

但它总是像这样显示白旗????

有没有办法使用区旗?

我在 Swift 4.1 和 iPhone X (iOS 11.4) 中测试的示例源代码

【问题讨论】:

  • @MartinR:这不太正确。从 Swift 4.0 开始,Swift 使用运行代码的操作系统的 ICU 库。因此,随着操作系统的更新,程序会自动“学习”新的 Unicode 规则。
  • @OleBegemann:好的,谢谢。

标签: swift unicode emoji flags


【解决方案1】:

从 Swift 4.0 开始,Swift 使用运行代码的操作系统的 Unicode 库 (ICU)。所以 Swift 本质上与底层操作系统拥有相同的 Unicode 知识。

我刚刚在 macOS 10.13.6 上对此进行了测试,Swift 4.1 (Xcode 9.4) 和 4.2 (Xcode 10.5) 都能正确处理区域标志表情符号。即被识别为单个Character

let california = "\u{1F3F3}\u{E0075}\u{E0073}\u{E0063}\u{E0061}\u{E007F}"
california.count // returns 1 in Swift 4.1 on macOS 10.13.6

现在,Swift 与 nothing 与此表情符号的渲染方式有任何关系,即,如果您的操作系统附带的字体包含加利福尼亚州旗的字形。这会因操作系统而异,并且当前的 Apple 操作系统似乎不包含字形(在我的测试中,该标志在 iOS 12 beta 6 上也显示为白色)。但同样,这与 Swift 无关。

【讨论】:

    【解决方案2】:

    这里不是 Swift 问题,而是底层操作系统/平台和字体支持问题。

    let california = "?\u{E0075}\u{E0073}\u{E0063}\u{E0061}\u{E007F}"
    california.count // .characters not needed / deprecated in Swift 4
    

    这会正确返回 1 — 根据 Swift 的字符串处理系统,这里只有一个表情符号字符。

    但是,仅仅因为 Swift 将其视为 Unicode 10.0 / Emoji 5.0 规范中的单个字符并不意味着您运行的任何平台都知道如何显示该字符。您是否看到任何给定标签序列的正确标志图像取决于您正在查看该序列的平台和字体是否包含该标签序列的图像/字形。

    macOS、iOS 和其他 Apple 平台随附的 AppleColorEmoji 字体包含该规范定义的某些区域/细分标志标记序列的字形,并非所有可能的 ISO 3166-2 区域。具体来说,该字体仅包含在 Unicode 10.0 / Emoji 5.0 规范中被称为“推荐用于一般交换”的这三个区域标签(如您的问题链接到的页面中所述):???????England,???? ???苏格兰和???????威尔士。

    允许平台/字体供应商(例如 Apple 或 Twitter)为其他 ISO 3166-2 区域标签序列提供字体字形/图像。 (但规范不要求提供此类以声称合规,因此大多数供应商都不需要。)在 Apple 的情况下,您至少可以file bugs 请求更多支持......也许他们可以谈支持加利福尼亚,以便每台 Mac 上的细则都可以说“?‍? by  in ??????”?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-22
      • 2016-11-04
      • 1970-01-01
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多