我发现 C# (.NET v4.0) 和 Java 在使用“不变”区域性将 'і' 转换为小写字母方面存在行为差异。
在 Java 中,"і".toLowerCase(Locale.ROOT)
返回 'i'
。
在 C# 中,"?".ToLowerInvariant()
和 "?".ToLower(CultureInfo.InvariantCulture)
均返回 "?"
但 "?".ToLower(new CultureInfo("en-EN"))
返回 'i'
。
看起来 Java 正确执行了转换,但 C# 却没有。这是 C# 中的错误吗?
最佳答案
我们来看看吧。问题的字母
İ
事实上
U + 0130: Latin Capital Letter I With Dot Above
(字符映射引用)。恕我直言,在不变文化的情况下(我们无权使用英语或土耳其语的任何文化)ToUpperInvariant()
方法应该返回字母本身,这似乎是合理的
(因为它已经是大写了)并且对于 ToLowerInvariant
结果应该类似于
U + xxxx: Latin Small Letter I With Dot Above
但是,我们没有这样一封信:
https://en.wikipedia.org/wiki/Dotted_and_dotless_I
由于我们没有所需的信件,我们所能做的就是保留原始信件完整。
当我们使用“en-EN”
(英语)文化时,我们有权将带有点的字母I对应于只是很好的旧英语 I
,因此为ToLower()
返回i
。
关于java - C# 中的 string.ToLowerInvariant() 与 Java 中的土耳其语 String.ToLowerCase(Culture.ROOT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38523156/