2

我看到 C# (.NET v4.0) 和 Java 在将“İ”转换为具有“不变”文化的小写时的行为有所不同。

在 Java 中,"İ".toLowerCase(Locale.ROOT)返回'i'.

在 C# 中,"İ".ToLowerInvariant()两者"İ".ToLower(CultureInfo.InvariantCulture)都返回"İ""İ".ToLower(new CultureInfo("en-EN"))返回'i'.

看起来 Java 正确地进行了转换,但 C# 没有。这是 C# 中的错误吗?

4

1 回答 1

3

我们来看一下。问题的信

实际上是

U + 0130: 上面带点的拉丁文大写字母 I

字符映射引用)。恕我直言,这似乎是合理的,在不变文化的情况下(我们无权使用英语或土耳其语ToUpperInvariant()的任何文化)方法应该返回字母本身(因为它已经是大写字母)并且ToLowerInvariant结果应该类似于

U + xxxx:上面带点的拉丁文小写字母 I

但是,我们没有这样的信:

https://en.wikipedia.org/wiki/Dotted_and_dotless_I

而且由于我们没有所需的字母,我们所能做的就是保持原件完好无损

当我们使用,比如说"en-EN"英语)文化时,我们有权将Letter I With Dot Above对应于刚刚好的古英语I从而返回i.ToLower()

于 2016-07-22T10:15:08.137 回答