如何使用streamreader使用当前编码读取byte

我想用C#读取byte[]和当前的文件编码。

正如在MSDN中编写的那样,当构造函数没有编码时,默认编码将是UTF-8:

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

我也试过这个,但仍然把文件作为UTF-8:

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

我需要用当前编码读取byte[]

文件没有编码。 字节数组没有编码。 一个字节没有编码。 编码是将字节转换为文本的内容,反之亦然。

您在文本编辑器等中看到的实际上是程序魔术:编辑器尝试不同的编码然后猜测哪一个最有意义。 这也是您使用boolean参数启用的内容。 如果这不能产生你想要的东西,那么这种魔法就会失败。

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

将使用OS / Location特定的默认编码。 如果那还不是你想要的,那么你需要完全明确,并告诉streamreader要使用的确切编码,例如(就像一个例子,你说你不想要UTF8):

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

我只是尝试利用不同的方法来尝试找出ByteEncoding,并且不可能这样做,因为字节数组没有像Jan在他的回复中提到的编码。 但是,您总是可以获取值并进行类型转换为UTF8或ASCII / Unicode并测试字符串值,以防您执行“Text.EncodingFormat.GetString(byte [] array)”

 public static bool IsUnicode(string input) { var asciiBytesCount = Encoding.ASCII.GetByteCount(input); var unicodBytesCount = Encoding.UTF8.GetByteCount(input); return asciiBytesCount != unicodBytesCount; }