7

ハンガリーの CultureInfo を使用した String.Compare() は、特定の文字列に対して正しく動作しません。

if (0 == String.Compare(@"ny", @"nY", true, new CultureInfo("hu-HU")))
  Console.WriteLine("Equal");
else
  Console.WriteLine("Not equal");

もちろん、「等しい」という答えが得られると思いますが、そうではありません。文字列を変更すると、正しく機能します (たとえば、"abc" と "ABC" の場合は "Equal" と表示されます)。特定の記号に問題があるようです。

4

1 に答える 1

5

あなたは何を期待しますか?ハンガリー語では、「ny」は1文字と見なされます。「ny」、「Ny」、または「NY」のように書くことができます。しかし、決して「nY」ではありません。これは期待どおりに機能します。

  var hu = new CultureInfo("hu-HU");
  Console.WriteLine(String.Compare("Ny", "NY", true, hu));
  Console.WriteLine(String.Compare("ny", "NY", true, hu));
  Console.WriteLine(String.Compare("ny", "Ny", true, hu));

ハンガリー語では、外国語と一部の名前を除いて、文字 "y" はありません。しかし、あなたが言うとき"nY"、これが「ny」の文字である可能性はありません. したがって、.NET では2文字として扱われる可能性があります。

ハンガリー語をよく知っている人はいますか?彼らの意見を聞くのは興味深いかもしれません。しかし、文字列「nY」が「自然な」ハンガリー語に現れることは決してないだろうと確信しています。

于 2012-07-11T09:17:29.350 に答える