C# toUpper 用于不带大写的语言

  • 本文关键字:语言 toUpper 用于 c#
  • 更新时间 :
  • 英文 :


使用String.toUpper()时,在尝试"格式化"不包含大写字符的语言(如阿拉伯语)时,是否必须采取任何其他预防措施?

string arabic = "مرحبا بالعالم";
string upper= arabic.ToUpper();

侧边栏:当本地化很重要时,切勿调用.ToUpper().ToLower(),因为这些方法不接受明确IFormatProvider来明确您的意图(关于本地化)。你应该更喜欢CultureInfo.TextInfo.ToUpperCase

但要回答您的问题:大小写转换不会影响不受大小写约束的字符,它们保持原样。这也发生在en-US和其他拉丁字母语言中,因为数字0, 1, 2等字符也没有大小写 - 因此您的阿拉伯字符将按原样保留。

请注意如何忽略非字母顺序和已经大写的字符:

"abcDEF1234!@#" -> "ABCDEF1234!@#"

另一件需要注意的事情是,某些语言的字符在小写和大写形式之间没有一对一的映射,即土耳其语 I,写在这里:https://haacked.com/archive/2012/07/05/turkish-i-problem-and-why-you-should-care.aspx/(这就是为什么 FxCop 如果你使用ToLower而不是ToUpper,就会对你大喊大叫,以及为什么你应该使用StringComparison.OrdinalIgnoreCaseCurrentCultureIgnoreCase并且永远不要str1.ToLower() == str2.ToLower()不区分大小写的字符串比较。

最新更新