结合 Grapheme Joiner 在 Cocoa、iOS 中不起作用?

Posted

技术标签:

【中文标题】结合 Grapheme Joiner 在 Cocoa、iOS 中不起作用?【英文标题】:Combining Grapheme Joiner doesn't work in Cocoa, iOS? 【发布时间】:2012-02-20 01:28:03 【问题描述】:

这个字符串:

[NSString stringWithFormat:@"%C%C%C%C", 0x31, 0x34f, 0x32, 0x20dd]

应该显示为 12,并在两个字符周围有一个圆圈。 0x34f 是 Combining Grapheme Joiner,0x20dd 是一个组合圆。

显示的是 12,只有 2 周围有圆圈。连接器似乎被忽略了。有没有办法让组合字形连接器工作?

【问题讨论】:

【参考方案1】:

不建议使用 Combining Grapheme Joiner:

来自 Unicode 标准,第 16.2 章 Layout Controls - Combining Grapheme Joiner

渲染。 对于渲染,组合字形连接器是不可见的。 但是,一些较旧的实现可能会处理一系列字素 通过将字形连接符组合为单个单元来链接集群 封闭组合标记的应用。有关更多信息 字素簇,参见 Unicode 技术报告 #29,“Unicode 文本 分割。”有关封闭组合标记的更多信息,请参阅 第 3.11 节,规范化形式。

来自第3.6章组合

但是应该注意的是,旧的实现可能有 支持将封闭组合标记应用于整个 印度辅音连接或连接到一系列字素簇 通过将字形连接器组合在一起。这种方法有很多 技术问题并导致互操作性缺陷,因此它是 强烈建议实现不要遵循它。

来自http://unicode.org/faq/char_combmark.html#19

问:是否可以将变音符号或组合封闭标记应用于多个(非组合)字符的序列?

A:不,除了故意设计用于两个字母序列的“双重变音符号”,例如U+035D 结合双短。 ZWJ (U+200D ZERO WITDH JOINER) 和 CGJ (U+034F COMBINING GRAPHEME JOINER) 都不会以任何后续组合字符的范围都会受到影响的方式将字符“粘合”在一起。要将像“Esc”这样的字符序列变成像 U+20E3 COMBINING ENCLOSING KEYCAP 这样的字符序列,您必须求助于更高级别的协议。 [KP]

【讨论】:

以上是关于结合 Grapheme Joiner 在 Cocoa、iOS 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

Guava Joiner 拼接字符串

guava之Joiner 和 Splitter(转)

guava字符串处理 Joiner Splitter CharMatcher

改进YOLOv5系列:首发结合最新CSPNeXt主干结构(适用YOLOv7),高性能,低延时的单阶段目标检测器主干,通过COCO数据集验证高效涨点

python 文件Joiner

Joiner的简单了解