2

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

var readLines = File.ReadLines(file);

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

文件内容:

测试

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

4

1 回答 1

4

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

var readLines = File.ReadLines(file, Encoding.Unicode);

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

于 2018-05-02T17:54:43.440 回答