StringCompace的StringComparison类型的文化是否重要?

时间:2012-08-21 15:07:56

标签: c#

在C#中,您可以将两个字符串与String.Equals进行比较,然后提供StringComparison

我最近一直在寻找更新我比较ToLower()的古老方法,因为我读到它并不适用于所有语言/文化。

据我所知,比较类型用于确定在面对包含ae的列表时的顺序,该列表应首先出现(某些文化以不同的方式排序)。

使用string.Equals,排序并不重要。因此可以安全地假设许多选项是无关紧要的,只有[Ordinal]和[Ordinal] IgnoreCase很重要?

MSDN article for String.Equals

  

comparisonType参数指示比较是否应该   使用当前或不变的文化,尊重或忽视的情况   比较两个字符串,或使用单词或序数排序规则。

string.Equals(myString, theirString, StringComparison.OrdinalIgnoreCase)

我也有兴趣了解排序方法如何在内部工作,是否使用String.Compare来计算两个字符串的相对位置?

1 个答案:

答案 0 :(得分:7)

不区分大小写的比较是依赖于文化的。例如,使用土耳其文化时,i的{​​{1}}不是小写字母。该文化II配对,ıİ配对。请参阅Dotted and dotless I on Wikipedia

有许多与文化敏感的字符串操作相关的奇怪效果。例如"KonNy".StartsWith("Kon") can return false

所以我建议转换到对文化不敏感的操作,即使是看似无害的操作。


即使对文化不敏感的操作,在unicode中存在大量不直观的行为,例如同一字形的多个表示,看起来相同的不同代码点,被某些操作忽略的零宽度字符,但是被其他人观察到。 ..