FileStream每隔一个字符返回空字符

tca*_*les 4 c# file-io text filestream

我似乎在C#中遇到了一些文件流问题.我试图读取由MSI安装程序生成的非常大的文本文件10mb的最后一行.

我使用的代码是:

string path = @"C:\uninstall.log";
byte[] buffer = new byte[100];

using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
    long len = fs.Length;

    fs.Seek(-100, SeekOrigin.End);

    fs.Read(buffer, 0, 100);
}

string foo = Encoding.UTF8.GetString(buffer);
Console.WriteLine("\"" + foo + "\"");
Run Code Online (Sandbox Code Playgroud)

但输出看起来与此类似:

H E L L O   W O R L D ! ! ! B L A H   B L A H
Run Code Online (Sandbox Code Playgroud)

显然,读取的流包含每个其他字符的'\ 0'(空)字符.有谁知道是什么原因造成的?

Dan*_*ner 7

该文件可能是UTF-16文件,而不是UTF-8文件.只是尝试使用Encoding.Unicode而不是Encoding.UTF8.


prp*_*fee 7

请改用Encoding.UnicodeEncoding.您的文件以UTF-16编码,而不是UTF-8.

  • 跳过空字节对于`FileStream`来说是奇怪的和意外的行为 - 有很多文件格式,其中空字节是有意义的! (2认同)