2016-11-24 6 views
-1

Возможно, что-то очевидное, что я здесь отсутствует, но я не могу настроить кодировку в моем FileStream. Вот код:C# FileStream read set encoding

FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read); 
      using (fs) 
      { 

       byte[] buffer = new byte[chunk]; 
       fs.Seek(chunk, SeekOrigin.Begin); 
       int bytesRead = fs.Read(buffer, 0, chunk); 
       while (bytesRead > 0) 
       { 
        ProcessChunk(buffer, bytesRead, database, id); 
        bytesRead = fs.Read(buffer, 0, chunk); 
       } 

      } 
      fs.Close(); 

Где ProcessChunk сохраняет значения считанных на объекты, которые затем сериализуются в XML, но символы чтение появляется неправильно. Кодировка должна быть 1250. Я не видел возможности добавить кодировку в FileStream. Что мне здесь не хватает?

+0

попробуйте использовать '' 'StreamWriter''' вместо' '' FileStream''' – tym32167

+1

Поскольку вы читаете * bytes *, кодировки не существует. Если эти байты составляют текст, это процесс преобразования этих байтов в текст, требующий кодировщика. В вашем коде или вопросе нет следа обработки текста (кроме «где я могу указать кодировщик»), поэтому вопрос в следующем: нужно ли вам * кодер? –

ответ

1

Вместо FileStream используйте StreamReader. Он имеет несколько constructors, которые позволяют вам указать кодировку. Например:

StreamReader srAsciiFromFile = new StreamReader(file, System.Text.Encoding.ASCII); 

Я хотел бы также предложить писать как:

using (StreamReader fs = new StreamReader ...etc) 

вместо объявления переменной за пределами использования; и вам не нужно делать Закрытие вне использования, начиная с the Dispose will handle that.

+0

Как я могу указать размер куска с помощью Streamreader? Мне нужно, чтобы он начинался с указанной начальной точки в файле и читал куски определенного размера по одному за раз, поэтому я использую FileStream. – Flopn

+0

Существует эквивалентный метод «Чтение» в StreamReader https://msdn.microsoft.com/en-us/library/9kstw824(v=vs.110).aspx; это просто, что теперь кодирование разрешено, у вас есть «char» вместо «byte». – Richardissimo

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

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