10

可能重复:
为什么 string.Compare 似乎不一致地处理重音字符?

我有以下代码

var s1 = "ABzzzzz2";
var s2 = "äbzzzzz1";

var cmp = StringComparison.InvariantCultureIgnoreCase;

Console.WriteLine(string.Compare(s1, 0, s2, 0, 7, cmp)); //prints -1
Console.WriteLine(string.Compare(s1, 0, s2, 0, 8, cmp)); //prints 1

怎么可能第一个字符串的一部分小于第二个字符串的一部分,而整个第一个字符串大于整个第二个字符串?
我已经在 x64、.net 2.0、3.5、4.0 上对其进行了测试

4

1 回答 1

1

我的理论是该算法首先对字符串进行规范化,然后进行比较。根据这个“äbzzzzz1”归一化为“abzzzzz1”。标准化形式的第一次比较结果相等,但返回 0 将是不正确的,因为实际字符串不相等。所以它恢复为序数比较和结果-1。

第二种情况,归一化后,很明显“abzzzzz2”大于“abzzzzz1”,所以结果为1。

此方法还解释了此问题中提到的案例 有关规范化详细信息,请查看MSDN 页面

于 2012-11-08T15:34:57.607 回答