使用String.toUpper()
时,在尝试"格式化时,必须采取任何其他预防措施。一种不包含大写字母的语言,如阿拉伯语?
string arabic = "مرحبا بالعالم";
string upper= arabic.ToUpper();
答案 0 :(得分:5)
补充工具栏:当本地化很重要时,切勿致电.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/(这就是为什么如果你使用ToLower
代替ToUpper
,FxCop会对你大吼大叫,为什么你应该使用StringComparison.OrdinalIgnoreCase
或CurrentCultureIgnoreCase
而不是str1.ToLower() == str2.ToLower()
用于案例 - 不敏感的字符串比较。