C# 如何使用streamreader以当前编码读取字节[]

C# 如何使用streamreader以当前编码读取字节[],c#,.net,encoding,stream,streamreader,C#,.net,Encoding,Stream,Streamreader,我想用文件的当前编码用C读取字节[] 如MSDN中所述,当构造函数没有编码时,默认编码将为UTF-8: var reader = new StreamReader(new MemoryStream(data)). 我也尝试过这一点,但仍然以UTF-8的形式获取文件: var reader = new StreamReader(new MemoryStream(data),true) 我需要用当前编码读取字节[]。文件没有编码。字节数组没有编码。字节没有编码。编码是将字节转换为文本,反之亦然

我想用文件的当前编码用C读取字节[]

如MSDN中所述,当构造函数没有编码时,默认编码将为UTF-8:

var reader = new StreamReader(new MemoryStream(data)).
我也尝试过这一点,但仍然以UTF-8的形式获取文件:

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

我需要用当前编码读取字节[]。

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

你在文本编辑器等中看到的实际上是程序魔术:编辑器尝试不同的编码,然后猜测哪种编码最有意义。这也是通过布尔参数启用的。如果这不能产生你想要的,那么这个魔术就失败了

var reader = new StreamReader(new MemoryStream(data), Encoding.Default);
将使用特定于操作系统/位置的默认编码。如果这仍然不是您想要的,那么您需要完全明确,并告诉streamreader要使用的确切编码,例如,作为一个示例,您说过您不想要UTF8:

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

我只是尝试利用不同的方法来找出字节编码,但这是不可能的,因为字节数组没有像Jan在回复中提到的那样进行编码。但是,如果您正在执行Text.EncodingFormat.GetStringbyte[]数组,则始终可以获取该值并将其转换为UTF8或ASCII/Unicode,然后测试字符串值

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

你的问题毫无意义——字节数组没有编码。这只是二进制数据。如果您的文件包含二进制数据,则根本不应使用StreamReader。。。你应该只使用一个流。如果我们讨论的是文件的编码,那么问题可能是@JonSkeet的重复。你认为写一篇关于二进制数据、字符串、,编码等。如果你还没有,因为我看到很多类似的问题,我们非英语使用者很难解释。@I4V:Marc Gravell不久前写了一篇好文章:我发现了这篇文章:我再次检查了我们在web服务调用中得到的确切信息,它是byte[]。根据我的回答,我无法知道数据的编码。然后我需要检查文件是否包含bom或变音符号,以便选择正确的编码。utf-8、utf-8带bom或1252。谢谢你的回答。