2016-07-22 6 views
1

「İ」を小文字に変換するためのC#(.NET v4.0)とJavaの動作の違いは、不変の文化。string.ToLowerInvariant()in C#vs String.ToLowerCase(Culture.ROOT)for Javaトルコ語の場合

Javaの場合"İ".toLowerCase(Locale.ROOT)'i'を返します。 C#の

"İ".ToLowerInvariant()及び"İ".ToLower(CultureInfo.InvariantCulture)両方が"İ"しかし"İ".ToLower(new CultureInfo("en-EN"))戻り'i'を返します。

Javaは正しく変換を行っているようですが、C#は正しくありません。これはC#のバグですか?

+1

C#は大きなフィールドです。あなたの例では、どのバージョンの.NET/CLRを使用していますか? .NET 1.1,2.0,3.0,3.5,4.0,4.5,4.6? –

+0

完了。質問に追加されました。 – bittusarkar

+0

'CultureInfo'の値は、変換を実行する際に使用される文字セットに影響することがあります。英語は、デフォルトでASCIIまたはISO-8859-1のいずれかを使用する傾向があります。ここで、 'InvariantCulture'は特殊なトルコ語の'ı'文字を含むUTF-8エンコーディングを使用します。 –

答えて

2

見てみましょう。質問

の手紙は私が

はU + 0130実際に

です:ドット以上

文字マップ付きラテン資本手紙I見積もり)。それは不変文化(私たちはあらゆる文化、英語やトルコ語のいずれかを使用する権利はありません)(それはすでに資本だから)ToUpperInvariant()メソッドは文字自体 を返す必要がある場合にとToLowerInvariant結果のために必要があることを、私見、合理的なようですU + XXXX

ようなものになる:ドット以上でラテン レターI

はしかし、我々は、このようなを持っていない手紙:

https://en.wikipedia.org/wiki/Dotted_and_dotless_I

そして、我々は必要な手紙を持っていないので、私たちにできることすべては、元の1 そのままを残すことです。ドット以上により

私たちが使用し、"en-EN"英語)文化は、我々はレターに対応する権利を持っていると言う私はちょうど古き良き英語をへIので、ToLower()ためiを返します。

+0

私は理解していますこの。私が理解できなかったことは、Javaが 'Locale.ROOT'でそれをどのように変換できるかということです。上記の変換ルールはJavaには当てはまりませんか?これはJavaのバグですか? – bittusarkar

+0

http://stackoverflow.com/questions/11063102/using-locales-with-javas-tolowercase-and-touppercase –