File.ReadLines возвращает пустой символ после другого символа - PullRequest
0 голосов
/ 02 мая 2018

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

var readLines = File.ReadLines(file);

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

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

Тест

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

1 Ответ

0 голосов
/ 02 мая 2018

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

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

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

...