次のように、エンコーディングを StreamReader に渡すことができます。
StreamReader sr = new StreamReader(input_stream, Encoding.UTF8);
ただし、ドキュメントによると、デフォルトで Encoding.UTF8 が使用されることは理解しています。
アップデート
以下は 'Jalapeño' です。
byte[] bytes;
using (var stream = new FileStream("input.txt", FileMode.Open, FileAccess.Read, FileShare.Read))
{
var index = 0;
var count = (int) stream.Length;
bytes = new byte[count];
while (count > 0)
{
int n = stream.Read(bytes, index, count);
if (n == 0)
throw new EndOfStreamException();
index += n;
count -= n;
}
}
// test
string s = Encoding.UTF8.GetString(bytes);
Console.WriteLine(s);
これと同じように:
byte[] bytes;
using (var stream = new FileStream("input.txt", FileMode.Open, FileAccess.Read, FileShare.Read))
{
var reader = new StreamReader(stream);
string text = reader.ReadToEnd();
bytes = Encoding.UTF8.GetBytes(text);
}
// test
string s = Encoding.UTF8.GetString(bytes);
Console.WriteLine(s);
私が理解していることから、テキストが UTF エンコーディングで保存されている場合、「ñ」文字はテキスト内で 0xc391 として表されます。1 バイトしか読み取らないと、データが失われます。
ストリーム全体をバイト配列として読み取り (最初の例)、エンコードを行うことをお勧めします。または、StreamReader を使用して作業を行ってください。