File.ReadLines在每个其他char之后返回null char

时间:2018-05-02 17:49:08

标签: c# .net file file.readalllines

我正在尝试从文件中读取所有行,但是我得到了一些意想不到的结果,代码:

var readLines = File.ReadLines(file);

foreach (var line in readLines)
{
    //line = "T\0e\0s\0t\0"
}

文件内容:

  

测试

如果我会做line.Replace("\0", "")那么它工作正常但是我想了解为什么会发生这种情况以及如何使用ReadLines从文件中获取正确的值?

1 个答案:

答案 0 :(得分:4)

您的文件似乎以UTF-16编码。在第二个参数中指定编码为ReadLines()

var readLines = File.ReadLines(file, Encoding.Unicode);
没有第二个参数的

File.ReadLines()假定UTF-8作为文件的编码。 UTF-16文件使用两个字节来编码字符(拉丁字符使用UTF-16中的第一个字符,UTF-8中只使用一个字节)。因此,对于UTF-8,在您的文本中,每个其他字符都是\0