比较基于文化的字符串时的奇怪结果

时间:2016-03-14 18:40:18

标签: c# string cultureinfo

有一个原因:

string s1 =“aéa”; string s2 =“aea”;

string result = s1.Equals(s2, StringComparison.CurrentCultureIgnoreCase);
result = s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase);
尽管我现在的文化是法国人,但在所有情况下

result = false。 我希望2行中的一行应该返回true?

另一方面,我得到了

int a = string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace);

a = 0表示平等。

这听起来很悖论。任何解释???

提前thx。

1 个答案:

答案 0 :(得分:1)

在第一次相等检查中,您忽略了当前文化中的StringComparison.CurrentCultureIgnoreCase案例(fr)。因此,首先检查应该是false

在第二个问题中,您忽略了StringComparison.InvariantCultureIgnoreCase在不变文化中的案例。 é在不变文化中不等于e。在大多数文化中,这些角色实际上是不同的(具有不同的含义)。此检查应为false

在上一篇文章中,您忽略了CompareOptions.IgnoreNonSpace等变音符号等字符。最后一个应该是true

另请阅读here