java - C# 中的 string.ToLowerInvariant() 与 Java 中的土耳其语 String.ToLowerCase(Culture.ROOT)

标签 java c# turkish tolower

我发现 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/

相关文章:

c# - ASP.Net GridView 5000 条记录

c# - .net linq 查询连接

android - 任何适用于土耳其语的 Android TTS api?

spring-mvc - 字符编码 Spring MVC

java - 多条件 vs 多锁

java - 使用字符串数组将文件名分配给 ImageIcons (Java)

java - 如何将参数 Class<?> 赋予 Class<A>

java - 如何获取日期之间的月份数?

c# - ViewModel概念仍然存在于ASP.NET MVC Core中吗?

asp.net - asp.net 中的土耳其字符