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

最初の文字列の一部が 2 番目の文字列の一部よりも小さいのに、最初の文字列全体が 2 番目の文字列全体よりも大きいというのはどうしてでしょうか?
x64、.net 2.0、3.5、4.0でテストしました

4

1 に答える 1

1

私の理論では、アルゴリズムは最初に文字列を正規化し、次に比較を行います。この「äbzzzzzz1」によると、「abzzzzzz1」として正規化されます。正規化された形式での最初の比較は等しい結果になりますが、実際の文字列が等しくないため、0 を返すと矛盾します。したがって、序数比較に戻り、結果は -1 になります。

2 番目のケースでは、正規化後、「abzzzzzz2」が「abzzzzzz1」よりも大きいことが明らかであるため、結果は 1 になります。

このアプローチは、この質問で言及されているケースについても説明します 正規化の詳細については、 MSDN ページを確認してください

于 2012-11-08T15:34:57.607 に答える