根据Unicode 稳定性策略,大小写映射仅对大小写对是稳定的,即字符对X和Y,其中X是 Y 的完整大写映射,Y 是 X的完整小写映射。只有当这两个字符都具有这些属性时,它们之间的大小写关系才一成不变。
但是,Unicode 包含许多“不完整”的大小写对,其中只有小写形式已被编码,而大写形式完全缺失。这通常是用于传统上仅小写字母的转录系统中的字母的情况。如果发现大写形式并随后将其添加到 Unicode,则这些字母将收到新的大写映射。
最近发生的字符是“ʂ”(来自 Unicode 1.1)、“ᶎ”(来自 Unicode 4.1)和“ꞔ”(来自 Unicode 7.0),它们都具有全新的大写形式(Ꞔ、Ʂ、Ᶎ ) 两年前的 Unicode 12.0。
因为大小写映射不必是唯一的,这使得大写字母不能很好地替代正确的大小写折叠。例如,U+0434 (д) 和 U+1C81 (ᲁ) 都大写到 U+0414 (Д),但由于是 U+0414 的完整小写映射,只有前者被锁定为大小写对。如果有人在一些旧手稿中找到了 U+1C81 的专用大写字母版本,它会被赋予一个新的大写映射,导致 U+0434 和 U+1C81 在该操作下突然不再比较相等。
编辑:我刚刚记得一个大写字母不足以进行不区分大小写的匹配的当前示例:U+1E9E (ẞ) 已经是大写字母,因此对其自身大写。它的小写对应物是 U+00DF (ß),但 U+00DF 的大写映射是序列 <U+0053, U+0053> (SS)。
uppercase("ẞ") ≠ uppercase(lowercase("ẞ"))