Странная ошибка StreamReader с � - PullRequest
1 голос
/ 15 ноября 2011

StreamReader считывает '-' (alt + 0150) как �, даже если у меня есть кодировка UTF-8, и у меня есть DetectionEncodingFromByteOrderMarks (BOM), установленный в true.Кто-нибудь может мне помочь?

Ответы [ 3 ]

3 голосов
/ 15 ноября 2011

Этот байт-код не будет отображаться в кодированном тексте utf-8.Это '\ u2013', 0xe2 + 0x80 + 0x93 при кодировании в utf-8.Если вы получаете этот символ при вводе Alt + 0150 на цифровой клавиатуре, то ваша системная кодовая страница по умолчанию, вероятно, 1252. Просто передайте Encoding.Default конструктору StreamReader.

2 голосов
/ 15 ноября 2011

Вам необходимо знать кодировку, которая использовалась для кодирования текста.Там нет никакого способа обойти это.Попробуйте разные кодировки, пока не получите желаемые результаты.

Из MSDN:

Параметр detectEncodingFromByteOrderMarks обнаруживает кодировку, просматривая первые три байта потока.Он автоматически распознает UTF-8, Unicode с прямым порядком байтов и Unicode с прямым порядком байтов, если файл начинается с соответствующих меток порядка байтов.В противном случае используется предоставляемая пользователем кодировка.См. Метод Encoding.GetPreamble для получения дополнительной информации.

Это означает, что использование этой спецификации - просто дополнительная вещь, которая может или не может работать или может быть легко переопределена

1 голос
/ 15 ноября 2011

Как писали другие пользователи, вероятная причина этой проблемы - кодировка ANSI файла, который вы пытаетесь прочитать. Я воссоздал проблему, описанную вами при сохранении файла в кодировке ANSI.

Попробуйте использовать этот код:

 var stream = new StreamReader(fileName, Encoding.Default);

Здесь важен параметр Encoding.Default . Этот код должен читать правильно указанный вами символ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...