扩展的Grapheme集群停止合并

时间:2017-12-29 05:46:05

标签: swift swift4

我对Extended Grapheme Clusters有一个问题。 例如,请查看以下代码:

let message = "c\u{0327}a va bien" // => "ça va bien" 

Swift如何知道它需要合并(即ç)而不是将其视为小写字母c和“COMBINING CEDILLA”?

1 个答案:

答案 0 :(得分:1)

在字符串上使用unicodeScalars视图:

let message1 = "c\u{0327}".decomposedStringWithCanonicalMapping
for scalar in message1.unicodeScalars {
    print(scalar) // print c and Combining Cedilla separately
}

let message2 = "c\u{0327}".precomposedStringWithCanonicalMapping
for scalar in message2.unicodeScalars {
    print(scalar) // print Latin Small Letter C with Cedilla
}

请注意,并非所有复合字符都具有预先组合的形式,如Apple's Technical Q&A所示:

  

重要提示:为了简化文本处理,请勿转换为预先组合的Unicode。预合成的Unicode仍然可以包含复合字符。例如,没有预先组合的U + 0065 U + 030A(LATIN SMALL LETTER E,然后是COMBINING RING ROTER)