File.ReadLines возвращает пустой символ после другого символа

Я пытаюсь прочитать все строки из файла, однако я получаю некоторые неожиданные результаты, код:

var readLines = File.ReadLines(file);

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

Содержание файла:

Тестовое задание

Если я сделаю line.Replace("\0", "") тогда он работает нормально, однако я хотел бы понять, почему это происходит, и как я могу получить правильное значение из файла, используя ReadLines?

1 ответ

Решение

Ваш файл, кажется, закодирован в UTF-16. Укажите кодировку во втором параметре ReadLines()

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

File.ReadLines() без второго параметра предполагается UTF-8 в качестве кодировки файла. Файлы UTF-16 используют два байта для кодирования символа (латинские символы используют первый в UTF-16 и только один байт в UTF-8). Таким образом, для UTF-8, в вашем тексте каждый другой символ \0,

Другие вопросы по тегам