案例折叠操作的结果中不能出现多少个Unicode代码点?

时间:2016-04-24 04:55:45

标签: unicode unicode-string

很容易理解,但也许不容易回答。

Unicode中有0x110000个不同的代码点。

“Case folding”是一个可以对字符串执行的有损操作,以便获得适合于对其他字符串进行不区分大小写的比较的字符串表示。这在英语中类似于在排序之前将所有字符串更改为小写(因此所有以大写字母开头的字符串都不会在前面!),除了案例折叠操作不能正常运行任何一种语言的案例规则(因此它仅适用于内部操作,不适用于用户)。

某些代码点(我认为)不会出现在任何案例折叠的字符串中。我想尽可能准确地知道有多少这些。

1 个答案:

答案 0 :(得分:1)

案例折叠算法有多个版本(并且算法可针对不同的语言/上下文进行自定义),但在使用Unicode标准中指定的算法时:在CaseFolding.txt中具有映射的任何代码点(至少具有C状态,SF)不能出现在包含大小写字符串的字符串中。

对于真正不区分大小写的比较,具有NFKC规范化形式或Default_Ignorable_Code_Point属性的字符也将被替换,并且不会出现。这是DerivedNormalizationProps.txtNFKC_Casefold映射的字符集 - 总共10,146个代码点。