我对Extended Grapheme Clusters有一个问题。 例如,请查看以下代码:
let message = "c\u{0327}a va bien" // => "ça va bien"
Swift如何知道它需要合并(即ç)而不是将其视为小写字母c和“COMBINING CEDILLA”?
答案 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)