繁体   English   中英

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

[英]string.ToLowerInvariant() in C# vs String.ToLowerCase(Culture.ROOT) in Java for Turkish İ

我看到了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:上面带有圆点的拉丁文大写字母I

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

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

但是,我们没有这封信:

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

而且由于我们没有这封信的要求,所以我们所能做的就是保持原封不动

当我们使用"en-EN"英语 )文化时,我们有权将字母I With Dot Above与良好的旧英语 I并因此将i返回给ToLower()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM