https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html说:
\n\n\n如果两个字符串值(或两个字符值)的扩展字素簇在规范上等效,则认为它们相等。如果扩展字素簇具有相同的语言含义和外观,则它们在规范上是等效的,即使它们在幕后由不同的 Unicode 标量组成。
\n
扩展字素簇是什么意思?
\n正如您引用的文档中提到的:
\n\n\n扩展字素簇是一个或多个 Unicode 标量的序列,它们(组合时)产生单个人类可读字符。
\n
也就是说,扩展字素簇是单个“可见字符”,通常,光标在文本编辑器中围绕它跳跃。
\n例如,\xd1\x91两者\xd0\xb5\xcc\x88看起来相同,每个都是扩展的字素簇,但第一个是由单个 Unicode 标量(或代码点)生成的,而第二个是由两个生成的:
\xd1\x91= [ \xd1\x91 CYRILLIC SMALL LETTER IO]\xd0\xb5\xcc\x88= [ \xd0\xb5 CYRILLIC SMALL LETTER IE, "\xcc\x88 COMBINING DIAERESIS]\xd1\x91和\xd0\xb5\xcc\x88是规范上等价的,因此,即使它们是由不同的 Unicode 代码点序列生成的,它们也被认为是相等的(与例如比较精确 UTF-16 代码单元的-[NSString isEqualToString:]相反):
let e1 = "\xd1\x91"\nlet e2 = "\xd0\xb5\xcc\x88"\n\ne1.unicodeScalars.count // 1\ne2.unicodeScalars.count // 2\ne1 == e2 // true, because Swift String uses canonical equivalence\n(e1 as NSString).isEqual(to: e2) // false, because NSString compares UTF-16 code units\nRun Code Online (Sandbox Code Playgroud)\n准确地说,“扩展字素簇”是来自Unicode标准的文本分割算法之一。未编码的 Unicode 文本是 Unicode 代码点的序列。文本分割算法分析该序列并识别“可见字符”(也称为“扩展字素簇”)的边界。
\n如果您对详细信息感兴趣,可以从Glossary of Unicode terms开始。
\n| 归档时间: |
|
| 查看次数: |
675 次 |
| 最近记录: |