C#toUpper用于没有大写的语言

时间:2018-01-16 02:44:11

标签: c#

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

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

1 个答案:

答案 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.OrdinalIgnoreCaseCurrentCultureIgnoreCase而不是str1.ToLower() == str2.ToLower()用于案例 - 不敏感的字符串比较。