У меня возникла проблема при чтении файлов на C# с помощью StreamReader. У меня есть файл с кодировкой UTF-8. Я собираюсь упростить его в одной строке для примера. В одной строке есть новая строка. Я читаю кодировку UTF-8, но как только строка читается, похоже, что она не обрабатывает новую строку правильно. Позвольте мне показать примерВозможные проблемы с StreamReader
using (StreamReader sr = new StreamReader(file, Encoding.UTF8))
{
string line;
while ((line = sr.ReadLine()) != null)
{
Debug.WriteLine("test1\ntest2" + " - " + "test1\ntest2".GetHashCode());
Debug.WriteLine(line + " - " + line.GetHashCode());
}
}
Вот содержимое файла
test1\ntest2
Здесь выход из этого кода
test1
test2 - -61586127
test1\ntest2 - -228288099
В строке, напечатанное из строкового литерала он обрабатывает \ n как новую строку при ее печати. Когда он печатает строку, считанную из файла, она этого не делает. Вы также можете видеть, что значения хэш-кода различны.
Это не то же самое! В содержимом файла «\ n» - это текст, в коде C# «\ n» - это символ новой строки, потому что символ «\» является escape-символом, который сообщает компилятору, что следующий символ «особый». Если вы используете «\ t», вы указываете символ табуляции – bdn02
Является ли фактическое содержимое файла «\ n» (например, код ascii 92 для «\» и код ascii 110 для «n») или символ новой строки 0x0A? – Jure
У вас есть «\ n» (обратная косая черта и буква n), фактически записанные в вашем файле, или это символ новой строки, и вы просто отображали его так? Это компилятор, который превращает специальную escape-последовательность, такую как «\ n» в строке, в символ новой строки. Когда такая последовательность считывается из файла, это просто «обратная косая черта и буква n», она не будет автоматически преобразована в новую строку. –