案例折叠后需要标准化

时间:2013-08-08 06:38:23

标签: unicode normalization unicode-normalization case-folding

鉴于NFC标准化字符串,对该字符串应用完整的大小写折叠,我可以假设结果也是NFC标准化的吗?

我不明白Unicode标准在这句话中试图告诉我的是什么:

  

标准化也与案例折叠相互作用。对于任何字符串X,让   Q(X)= NFC(toCasefold(NFD(X)))。换句话说,Q(X)就是结果   规范化X,然后案例折叠结果,然后把   结果为标准化形式NFC格式。因为方式   定义归一化和大小写折叠,Q(Q(X))= Q(X)。   反复应用Q不会改变结果;案例折叠是   在规范化形式的规范标准化下关闭   NFC或NFD。

2 个答案:

答案 0 :(得分:2)

案例折叠后,Unicode字符串可能不在NFC中。一个例子是U+00DF(LATIN SMALL LETTER SHARP S),然后是U+0301(COMBINING ACUTE ACCENT)。

X = U+00DF U+0301
NFC(X) = U+00DF U+0301
toCasefold(NFC(X)) = U+0073 U+0073 U+0301
NFC(toCasefold(NFC(X))) = U+0073 U+015B

答案 1 :(得分:1)

你问过两个问题:

问题1:toCasefold(NFC(X))二进制文件是否等于NFC(toCasefold(NFC(X)))

标准没有明确回答这个问题。 (我希望答案是肯定的,那个案例折叠不会影响规范化,但我没有证据。)

问题2:引用中告诉我的Unicode标准是什么?

标准只是说在经典规范化之后没有必要再次进行大小写折叠。换句话说,规范标准化(对NFC或NFD形式)不会将任何字符从大写改为小写,反之亦然。这不能回答你的第一个问题。

并不是说在案件折叠后是否有必要再进行规范标准化。