根据文化比较字符串时出现奇怪的结果

odd results when comparing strings based on culture

有什么原因吗:

字符串 s1 = "aéa"; 字符串 s2 = "aea";

string result = s1.Equals(s2, StringComparison.CurrentCultureIgnoreCase);
result = s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase);

result = false 在所有情况下,尽管我当前的文化是法语。 我希望这两行之一应该 return true?

另一方面,我得到

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

a = 0 表示相等。

这对我来说听起来很矛盾。有什么解释吗???

提前致谢。

在第一次相等性检查中,您忽略了当前文化 (fr) 中 StringComparison.CurrentCultureIgnoreCase 的大小写。所以,首先检查应该是 false.

在第二个中,您忽略了具有 StringComparison.InvariantCultureIgnoreCase 的不变区域性中的大小写。在不变文化中,é 不等于 e。在大多数文化中,这些字符实际上是不同的(具有不同的含义)。此检查应为 false.

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

另请阅读here