gpt4 book ai didi

c# - String.ToLowerInvariant() 如何确定它必须转换成什么字符串/字符?

转载 作者:太空狗 更新时间:2023-10-30 01:17:05 26 4
gpt4 key购买 nike

众所周知,Unicode 的发明是为了解决代码页问题并表示世界上所有(当然不是全部,但大多数)语言的所有字符。接下来我们有 unicode 转换格式——如何用计算机字节表示 unicode 字符:

  • utf-8 一个字符可以占用1到4个字节
  • utf-16 一个字符占用 2 个字节,或 2*2bytes = 4bytes(.NET 使用此)
  • utf-32 一个字符总是占4个字节(听说Python用这个)

到目前为止,没问题。接下来我们以两种语言为例:

英国 (en-GB) 为英语,斯洛文尼亚 (sl-SI) 为斯洛文尼亚语。英语有下一个字符:a, b, c, d, e, ... x, y, z。斯洛文尼亚语除了 x、y 之外具有相同的字符,并且具有其他字符:č、š、ž。如果我运行以下代码:

Thread.CurrentThread.CurrentCulture = new CultureInfo("sl-SI");
string upperCase = "č".ToUpper(); // returns Č, which is correct based on sl-SI culture

// returns Č, how does it know that it must convert č to Č.
// What if some other language has character č, and č in that language converts to X.
// How does it determine to what character it must convert?
Thread.CurrentThread.CurrentCulture = new CultureInfo("tr-TR");
string upperCase1 = "č".ToUpperInvariant();

我们可以取turkish example :小写字母“i”变为大写字母时变为“İ”(U+0130“带点的拉丁文大写字母 I”)。同样,当我们的大写字母“I”变为小写字母时,它会变成“ı”(U+0131“拉丁文小写字母无点 I”)。

to upper

to lower

如果 ToUpperInvariant() 决定将“i”转换为土耳其语“İ”而不是“I”会怎样?然后是不变文化英语。超出了这个问题的范围,但是,世界上所有语言的每个小写字母都有大写字母吗?我想是的,但如果他们不这样做,是否有一种语言只有大写字符。是的,我知道我应该从\u+0000 到\u+FFFF 来测试这个。

最佳答案

不变文化是一种基于英语的假文化,因此所有“不变”转换都将基于英语。

Do all languages of the world have upper case for each lower case character?

不,他们没有。例如,中文没有大小写的概念。

而德语有字母ß , 没有大写版本。

考虑:

var germanCulture = new CultureInfo("de-DE");

System.Threading.Thread.CurrentThread.CurrentCulture = germanCulture;
System.Threading.Thread.CurrentThread.CurrentUICulture = germanCulture;

string s = "ß";

Console.WriteLine(s.ToUpper()); // Prints ß
Console.WriteLine(s.ToLower()); // Prints ß

// Aside: There's a special "uppercase" ß, but this isn't
// returned from "ß".ToUpper();

string t = "ẞ"; // Special "uppercase" ß.

Console.WriteLine(t == s); // Prints false.

Console.WriteLine(s.ToUpper() == t); // Prints false.

(有关奇怪的大写字母 ß ( ) 未从 "ß".ToUpper() 返回的详细信息,请参阅 here。)

关于c# - String.ToLowerInvariant() 如何确定它必须转换成什么字符串/字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32965990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com