繁体   English   中英

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

[英]Visual Studio C# - Console outputs incorrect string

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

    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);
}

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

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

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

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

byte[].Take() 似乎返回了某种类型的东西

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM