我正在尝试从文件中读取所有行,但是我得到了一些意想不到的结果,代码:
var readLines = File.ReadLines(file);
foreach (var line in readLines)
{
//line = "T\0e\0s\0t\0"
}
文件内容:
测试
如果我会做line.Replace("\0", "")
那么它工作正常但是我想了解为什么会发生这种情况以及如何使用ReadLines从文件中获取正确的值?
答案 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
。