Visual Studio C#-控制台输出不正确的字符串

时间:2018-08-16 18:50:34

标签: c# visual-studio

当我运行程序并打开文件时,它将在控制台中打印以下文本:

    File opened successfully
    System.Linq.Enumerable+<TakeIterator>d__25`1[System.Byte]

第一行是正确的,但是第二行是我不理解的那一行。打算发生的事情是,它应该读取文件的前4个字节,然后将其转换为字符串以打印到控制台,以便可以看到它正确地读取了文件头。在这种情况下,预期的输出将是“ MThd”,这是文件类型标识符。

这是创建字符串的代码:

if(fileName != null)
{
    byte[] fileBytes = File.ReadAllBytes(fileName);
    string header = fileBytes.Take(4).ToString();
    Console.WriteLine(header);
}

2 个答案:

答案 0 :(得分:1)

如果需要文本文件,请使用ReadAllText而不是ReadAllBytes。 如果要读取字节流并将其解释为字符串,请使用适当的解码方法,例如

var header = System.Text.UTF8Encoding.UTF8.GetString(fileBytes.Take(4));

对于当今的多字节字符集,不再保证一定数量的字节对应于一定数量的字符。只有坚持使用ASCII编码,这才可靠。

var header = System.Text.ASCIIEncoding.ASCII.GetString(fileBytes.Take(4));

答案 1 :(得分:0)

byte []。Take()似乎返回类型

System.Linq.Enumerable+<TakeIterator>d__25``1[System.Byte]

看起来不能直接转换为字符串。

尝试遍历它,并将其组件(字符串)写入控制台。