您可以将编码传递给 StreamReader,如下所示:
StreamReader sr = new StreamReader(input_stream, Encoding.UTF8);
但是,我知道根据文档默认使用 Encoding.UTF8 。
更新
下面的“墨西哥胡椒”很好:
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。当您只读取一个字节时,您将丢失数据。
我建议将整个流作为字节数组读取(第一个示例),然后进行编码。或使用 StreamReader 为您完成工作。