我想用c#读取byte[]
文件的当前编码。
在MSDN中,当构造函数没有编码时,默认编码将是UTF-8:
var reader = new StreamReader(new MemoryStream(data)).
我也试过这个,但仍然得到文件为UTF-8:
var reader = new StreamReader(new MemoryStream(data),true)
我需要用当前编码读取byte[]
。
文件没有编码。字节数组没有编码。字节没有编码。编码是将字节转换为文本,反之亦然。
您在文本编辑器中看到的东西实际上是程序魔术:编辑器尝试不同的编码,然后猜测哪个最有意义。这也是通过布尔参数启用的。如果这不能产生你想要的结果,那么这个魔法就失败了。
var reader = new StreamReader(new MemoryStream(data), Encoding.Default);
将使用OS/Location特定的默认编码。如果这仍然不是您想要的,那么您需要完全明确,并告诉流阅读器要使用的确切编码,例如(只是作为一个例子,您说您不想要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;
}