Классы .NET (System.IO.StreamReader
и т.п.) принимают кодировку UTF-8 в качестве кодировки по умолчанию. Если вы хотите прочитать другую кодировку, вы должны явно передать это соответствующей перегрузке конструктора.
Также обратите внимание, что не существует ни одной кодировки под названием «ANSI». Вы, вероятно, ссылаетесь на кодовую страницу Windows 1252, также называемую «западноевропейская». Обратите внимание, что это отличается от кодировки Windows по умолчанию в других странах. Это актуально, когда вы пытаетесь использовать System.Text.Encoding.Default
, потому что это на самом деле отличается от системы к системе.
/ РЕДАКТИРОВАТЬ: Кажется, вы неправильно поняли и мой ответ и мой комментарий:
- Проблема в вашем коде заключается в том, что вам нужно сообщить .NET, какую кодировку вы используете.
- Другое замечание о том, что «ANSI» может относиться к различным кодировкам, не имеет никакого отношения к вашей проблеме. Это было просто «кстати» замечание, чтобы предотвратить недоразумения (ну, у этого получилось обратное).
Итак, наконец: Решением вашей проблемы должен быть следующий код:
string text = System.IO.File.ReadAllText("path", Encoding.GetEncoding(1252));
Важной частью здесь является использование соответствующего System.Text.Encoding
экземпляра.
Тем не менее, это предполагает, что ваша кодировка действительно Windows-1252 (но я считаю, что Notepad ++ означает «ANSI»). Я понятия не имею, почему ваш текст отображается правильно при чтении NUnit. Я полагаю, что NUnit либо имеет какое-то автоматическое обнаружение для кодировок текста, либо NUnit использует некоторые странные настройки по умолчанию (т.е. не UTF-8).
Да, и, кстати: «ANSI» действительно относится к «Американскому национальному институту стандартов». Существует множество совершенно разных стандартов, в которых «ANSI» входит в их названия. Например, C ++ является (среди прочих) также стандартом ANSI.
Только в некоторых случаях (неточно) оно используется для обозначения кодировок Windows. Но даже там, как я пытался объяснить, обычно это относится не к специфической кодировке , а скорее к классу кодировок, который Windows использует по умолчанию для разных стран. Одним из них является Windows-1252.