【问题标题】:File.ReadLines returns null char after each other charFile.ReadLines 在一个字符之后返回空字符
【发布时间】:2018-10-12 22:05:22
【问题描述】:

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

var readLines = File.ReadLines(file);

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

文件内容:

测试

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

【问题讨论】:

  • 在我看来像文件编码,文件使用什么编码?

标签: c# .net file file.readalllines


【解决方案1】:

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

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

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

【讨论】:

  • 就是这样。谢谢!
  • 你知道为什么会导致这种奇怪的行为吗?
  • 这不是“奇怪的行为”;不管是谁写了那个文件,它都会保存这样的字符。
猜你喜欢
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多