2011-08-10 14 views
4

可能性の重複:
Determine a string's encoding in C#C#文字列のエンコーディングをチェックする方法はありますか?

私は、文字列が他に作成されたが場合、文字列UTF8がデフォルトを作成する場合、私は信じて、私が扱う前に余分に安全になりたいですそのエンコーディングが何であるかを確認します。文字列またはEncodingクラスを使用して簡単に行うことはできません。私は何かを見逃しているか、C#の文字列は常にUTF8何ですか? C#で

+0

文字列には* UTF-8にデフォルト設定されていますか?私の答えはもっと分かりますが、私はちょうどあなたがその印象をどこに持っているのか疑問に思っていました... –

答えて

7

文字列UTFあるは、エンコーディング、効果的に...またはあなたは、彼らがchar値のシーケンスだことを考えると、UTF-16としてそれらすべてを表示することができていない(まあ、.NET)、 -16コード単位。

しかし、通常は、文字列からバイナリ形式(たとえば、ソケットやファイル)に変換する際には、エンコーディングを気にする必要があります。その時点で、エンコーディングを明示的に指定する必要があります。文字列自体にはこれの概念がありません。

UTF-8を「デフォルト」とする唯一の側面は、エンコードを受け入れるためにオーバーロードされる.NET APIがたくさんあり、エンコードが指定されていない場合はUTF-8が使用されることです。 File.ReadAllTextがこの例です。しかし、ファイルを読んだ後には、「UTF-8ファイルから読み込まれたテキスト」と「Big5ファイルから読み込まれたテキスト」の区別はありません。

+0

確かに、文字列のchar値は16ビットコード**ユニット**のシーケンスであり、コード**ポイント* *完全なUnicodeには21ビットが必要です。私はあなたが知っていることは分かっていますが、UTF-16 Curseは他の多くのプログラマーを苦しめています。 Unicode文字を16ビットのcharに格納することはできません。それには32ビットの整数が必要です。 – tchrist

+0

@tchrist:私はいつもそれらの2つのどちらの方法が残っているのかを忘れています。私はそれが正しいことを得る価値があることに完全に同意する。最近、私はニーモニックを思いついて再び間違ってしまうことを避けていきます... –

+0

ニーモニックでは、単位が次元を持ち、ポイントが無次元であるのに役立つかもしれません。 UTF-8は8ビットのコード単位を持ち、UTF-16は16ビットのコード単位を持ちますが、コードポイント自体はビット幅のないabstact整数です。ええ、そうです、それで、いくつかのユニットがポイントをつくるのは意味がありません。 Lemmeはこれについて少し考えます。 – tchrist

関連する問題