3

给定一个 NFC 规范化字符串,对该字符串应用全大小写折叠,我可以假设结果也是 NFC 规范化的吗?

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

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

4

2 回答 2

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
于 2013-08-23T16:31:29.577 回答
1

你问了两个问题:

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

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

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

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

这并不是说在案例折叠后是否有必要再次进行规范归一化。

于 2013-08-23T14:35:25.773 回答