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
,