仅含ASCII的Unicode字符串是否始终归一化?拆分与区域依赖问询
Unicode归一化与土耳其语字符的处理
核心结论
- Unicode归一化无法将ASCII字符
i(U+0069)拆分为ı(U+0131)+ 组合点字符(U+0307)的序列 - 这类字符转换逻辑完全不依赖区域设置,Unicode归一化规则是全球统一的,不会因运行环境变化而改变
详细说明
Unicode归一化(包含NFC、NFD、NFKC、NFKD四种标准形式)的核心依据是Unicode标准定义的规范等价或兼容等价映射关系,这些关系是全局统一的,和系统的区域设置没有关联。
ASCII的i(U+0069)是一个预组合的独立字符,在Unicode的规范分解规则中,它的分解结果就是自身——Unicode从未将它定义为ı(U+0131)与U+0307的组合序列。反过来,ı(U+0131)加上U+0307的组合序列,也不会被归一化组合为i(U+0069),因为U+0131的规范组合规则里并没有和U+0307组合成U+0069的定义。
在土耳其语书写体系中,i和ı是两个语义完全不同的独立字符,Unicode将它们作为独立码点区分对待,二者之间不存在归一化层面的转换关系。如果需要在这两个字符间转换,这属于区域化的字符映射操作(比如土耳其语特有的大小写转换规则),但这类操作和Unicode归一化是完全不同的概念。
举个例子:在土耳其语环境下,i的大写形式是İ(U+0130),ı的大写形式是I(U+0049),这是区域化的大小写映射规则,不属于Unicode归一化的处理范畴。
内容的提问来源于stack exchange,提问作者Netch
相关产品推荐
相关产品推荐

