2009-03-12 5 views
1

У меня теперь есть проблема, когда символ Цельсия читается как C вместо ° C.Кодировка файла при чтении файла с помощью StreamReader

Похож на кодировку преступника. Я пытался сделать это:

  using (StreamReader sr = new StreamReader(this._inFilePath,System.Text.Encoding.Unicode ,true)) 

вместо

  using (StreamReader sr = new StreamReader(this._inFilePath)) 

, но я теперь получаю мусор .... это оригинальное кодирование файла должно соответствовать кодировке StreamReader? Я использую Compact Framework 2.0.

Я нашел this в сети, но если это используется, я прочитал все это в байтовый массив, обнаружил конец каждой строки, конвертировал его в Юникод, а затем продолжил логику программы. Кто-нибудь использовал этот класс?

+0

Что было первоначальное кодирование файла? –

+0

utf-8. Если я передаю utf-8 в качестве параметра в устройство чтения потока, данные считываются, но celsius становится C – sarsnake

+1

, поэтому файл должен быть сохранен в unicode для чтения в Unicode? Простите глупый вопрос – sarsnake

ответ

2

Да, вам нужно указать правильную кодировку при создании StreamReader. .NET мог бы обнаружить кодировку для вас. Существуют перегрузки для конструктора StreamReader, которые берут логический параметр, который вы можете использовать для запроса такого поведения.

общественного StreamReader (строка пути, BOOL detectEncodingFromByteOrderMarks)

+0

Так что, если я хочу, чтобы файл читался в Юникоде, я должен сначала его сохранить в Юникоде, правильно? – sarsnake

+0

как это сделать ??? – sarsnake

+1

Вам нужно использовать кодировку, поддерживающую unicode. Обычно это UTF-8 или UTF-16 (который называется «Unicode» в .NET). Обязательно не используйте ASCII или ANSI (Encoding.Default). Вы можете опубликовать еще один вопрос о сохранении файлов и более подробно описать свою ситуацию. –

 Смежные вопросы

  • Нет связанных вопросов^_^