如果两个字符串值(或两个字符值)的扩展字素簇规范相等,则认为它们相等。如果扩展字素簇具有相同的语言含义和外观,即使它们是由幕后的不同Unicode标量组成的,它们在规范上也是等效的。
扩展字素簇是什么意思?
答案 0 :(得分:3)
正如您在引用的 document 中提到的:
<块引用>扩展字素簇是一个或多个 Unicode 标量的序列,(组合时)产生一个人类可读的字符。
也就是说,一个扩展的字素簇是一个单一的“可见字符”,通常,在文本编辑器中,光标会在它周围跳跃。
例如,ё
和 ё
看起来都一样,每一个都是一个扩展的字素簇,但第一个是由单个 Unicode 标量(或代码点)产生的,而第二个一对二:
ё
= [ё CYRILLIC SMALL LETTER IO
]ё
= [е CYRILLIC SMALL LETTER IE
, "̈ COMBINING DIAERESIS
]ё
和 ё
在规范上是等价的,因此,即使它们是由不同的 Unicode 代码点序列产生的,它们也被认为是相等的(例如,-[NSString isEqualToString:]比较确切的 UTF-16 代码单元):
let e1 = "ё"
let e2 = "ё"
e1.unicodeScalars.count // 1
e2.unicodeScalars.count // 2
e1 == e2 // true, because Swift String uses canonical equivalence
(e1 as NSString).isEqual(to: e2) // false, because NSString compares UTF-16 code units
准确地说,“扩展字素簇”是来自Unicode standard的文本分割算法之一。未编码的 Unicode 文本是一系列 Unicode 代码点。文本分割算法分析该序列并识别“可见字符”(也称为“扩展字素簇”)的边界。
如果您对细节感兴趣,最好从 Glossary of Unicode Terms 开始。