5

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

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

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

我也试过这个,但仍然以 UTF-8 格式获取文件:

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

我需要byte[]使用当前编码阅读。

4

2 回答 2

13

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

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

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

将使用操作系统/位置特定的默认编码。如果这仍然不是您想要的,那么您需要完全明确,并告诉流阅读器要使用的确切编码,例如(例如,您说您不想要 UTF8):

var reader = new StreamReader(new MemoryStream(data), Encoding.UTF8);
于 2013-05-16T22:05:29.460 回答
0

我只是尝试利用不同的方式来尝试找出 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;
}
于 2015-10-29T02:56:56.953 回答