使用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.OrdinalIgnoreCase
或CurrentCultureIgnoreCase
并且永远不要str1.ToLower() == str2.ToLower()
不区分大小写的字符串比较。