5

byte[]ファイルの現在のエンコーディングで C# を使用して読みたいと思います。

MSDN に書かれているように、コンストラクターにエンコーディングがない場合、デフォルトのエンコーディングは UTF-8 になります。

var reader = new StreamReader(new MemoryStream(data)).

私もこれを試しましたが、それでもファイルを UTF-8 として取得します。

var reader = new StreamReader(new MemoryStream(data),true)

byte[]現在のエンコーディングでを読み取る必要があります。

4

2 に答える 2

13

ファイルにはエンコーディングがありません。バイト配列にはエンコードがありません。バイトにはエンコードがありません。エンコーディングは、バイトをテキストに、またはその逆に変換するものです。

テキスト エディターなどで見られるのは、実際にはプログラム マジックです。エディターはさまざまなエンコーディングを試し、どれが最も理にかなっているかを推測します。これは、boolean パラメータで有効にするものでもあります。これで望む結果が得られない場合、この魔法は失敗します。

var reader = new StreamReader(new MemoryStream(data), Encoding.Default);

OS/場所固有のデフォルトのエンコーディングを使用します。それがまだあなたが望むものではない場合は、完全に明示的にする必要があり、たとえば、使用する正確なエンコーディングをストリームリーダーに伝える必要があります (例として、UTF8 は必要ないと言いました):

var reader = new StreamReader(new MemoryStream(data), Encoding.UTF8);
于 2013-05-16T22:05:29.460 に答える
0

Janが返信で言及しているように、ByteEncodingを把握しようとする別の方法を活用しようとしましたが、バイト配列にはエンコーディングが設定されていないため、これを行うことはできません。ただし、「Text.EncodingFormat.GetString(byte [] array)」を実行している場合は、いつでも値を取得して UTF8 または ASCII/Unicode に型変換し、文字列値をテストできます。

public static bool IsUnicode(string input)    
{    
    var asciiBytesCount = Encoding.ASCII.GetByteCount(input);
    var unicodBytesCount = Encoding.UTF8.GetByteCount(input);
    return asciiBytesCount != unicodBytesCount;
}
于 2015-10-29T02:56:56.953 に答える