【发布时间】:2018-01-02 20:39:31
【问题描述】:
土耳其语将带点和不带点的 I 分为两个单独的字符,每个字符都有自己的大写和小写形式。
Uppercase Lowercase
I U+0049 ı U+0131
İ U+0130 i U+0069
而在其他使用拉丁字母的语言中,我们有
Uppercase Lowercase
I U+0049 i U+0069
现在,Unicode 联盟可以将其实现为 六个 不同的字符,每个字符都有自己的大小写规则,但决定只使用四个,在不同的语言环境中具有不同的大小写规则。这对我来说似乎很奇怪。 做出该决定的理由是什么?
六个不同字符的可能实现:
Uppercase Lowercase
I U+0049 i U+0069
I NEW ı U+0131
İ U+0130 i NEW
当前使用的代码点:
U+0049 ‹I› \N{LATIN CAPITAL LETTER I}
U+0130 ‹İ› \N{LATIN CAPITAL LETTER I WITH DOT ABOVE}
U+0131 ‹ı› \N{LATIN SMALL LETTER DOTLESS I}
U+0069 ‹i› \N{LATIN SMALL LETTER I}
【问题讨论】:
-
I U+0049与I NEW有何不同?是不是性格不一样?英文I和瑞典文I有区别吗? -
询问“基本原理”通常并不是一个理想的 SO 问题(即“为什么 C# 允许 null?”) - 例如有文档记录的原因,这些应该可以作为历史记录在档案中找到,并且在没有此类存档信息的地方..
-
@HansPassant 排版师会抱怨 Unicode 的错误是由于 30 年前由最初是程序员的人拼凑而成的。语言学家会抱怨这是因为一堆程序员和排版师想出来的。涉及的多个学科会将其归咎于遗留问题,至少在这种情况下是正确的。
-
@HansPassant 而且,统一的一般问题——说“这个字符是否与那个字符相同”——在任何尝试通用字符集的过程中都是经常出现的,没有完美的答案, 分裂或集总的极端都不是最优的。
-
即使 Unicode 为这些字符实现了单独的代码点,它也只解决了土耳其语的一个问题,留下了 a lot of other case mapping problems 并引入了一些其他问题
标签: unicode