Вы должны будете пройти кодировку в StreamReader
конструктора. Существует нет такой вещи, как простой текст. Чтение текста требует зная его кодировку.
Линия
using (StreamReader sr = new StreamReader("c:/temp/34.csv"))
должен быть
using (StreamReader sr = new StreamReader("c:/temp/34.csv"), myencoding)
, что myencoding есть что-то только вы можете знать. С какими кодировками был сохранен файл? Это кодировка, в которой вы нуждаетесь. Если файл был сгенерирован в Windows, и получить обоснованное предположение о наиболее вероятной кодировке будет UTF-16LE. Эта кодировка доступна как Encoding.Unicode
- это плохое имя, оно должно было быть Encoding.UTF16LE
, но это имя использует .NET framework.
Другие возможные кодировки, которые поддерживаются StreamReader
перечислены на https://msdn.microsoft.com/en-us/library/System.Text.Encoding_properties(v=vs.110).aspx
Если вы не знаете, с какой кодировке файл был сохранен, некоторые кодировок оставить подсказки в виде Byte order mark
иногда сокращенно BOM
. Знак байтового байта - это первые несколько байтов текстового документа, которые сообщают вам его кодировку.Вы можете найти более подробную информацию о метка порядка байт, и некоторые из его значений на http://en.wikipedia.org/wiki/Byte_order_mark
Опираясь на спецификации, как правило, плохая идея, потому что
- это не полное доказательство решения: некоторые кодировки дон используйте спецификацию или внесите спецификацию.
- Даже если вы успешно определили кодировку, это не означает, что StreamReader знает, как обрабатывать эту кодировку (хотя это маловероятно, но возможно)
- Спецификация может не быть спецификацией вообще, но быть частью фактического текста (также маловероятным, но возможно)
В некоторых случаях невозможно узнать кодировку файла, особенно если файл поступает из файла, загружаемого в Интернете, или если кто-то просто отправил вам файл, и они не знают, как они закодировал его. Это может быть хорошей причиной, чтобы не допускать загрузки «обычного текста» (что разумно, потому что это может быть сделано с небольшим повторением, нет простого текста).
ТЛ; др: Наиболее вероятно, что на работу является одним из
using (StreamReader sr = new StreamReader(File.OpenRead(@"c:/temp/34.csv"),Encoding.Unicode) {
...
}
или
using (StreamReader sr = new StreamReader(File.OpenRead(@"c:/temp/34.csv"),Encoding.UTF8)
или
using (StreamReader sr = new StreamReader(File.OpenRead(@"c:/temp/34.csv"),Encoding.UTF32)
'читатель вар = новый StreamReader (File.OpenRead (@ "d: \ 34.csv"), Encoding.Unicode); 'вы пробовали Unicode? – fubo
Не могли бы вы поставить персидский файл csv, чтобы мы могли проверить его сами? –