根据文化比较字符串时出现奇怪的结果
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。
有什么原因吗:
字符串 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。