2014-12-08 5 views
1

Я читаю файл с StreamReader и записываю точную строку в другой файл с помощью StreamWriter. Однако проблема заключается в том, что в полученном файле любое появление символа '|' преобразуется в '?'.Ввод с Streamreader не дает тот же результат в StreamWriter

Это код для инициализации мои потоки:

using (var readFile = new FileStream(path, FileMode.Open, FileAccess.Read)) 
{ 
    using (var writeFile = new FileStream(@"Modified\" + Path.GetFileName(path), FileMode.Create, FileAccess.Write)) 
    { 
     using (var sr = new StreamReader(readFile, new ASCIIEncoding())) 
     { 
      using (var sw = new StreamWriter(writeFile, new ASCIIEncoding())) 
      { 
       //Read line and write it to the writer 
      } 
     } 
    } 
} 

Может ли это быть проблема с потоками или это скорее проблема с исходным файлом? Исходный файл сам по себе отображается просто в нескольких текстовых редакторах, поэтому он кажется правильным.

+0

Когда вы устанавливаете точки останова, как это выглядит в отладчике? – user1666620

+0

Вы пытались изменить кодировку на UTF8? –

+0

Очевидно, вы не * на самом деле * хотели бы использовать ASCIIEncoding. Если вы не знаете, что такое кодировка текста, то punt для Encoding.Default. Однако вы должны иметь ключ. –

ответ

3

| не является допустимым символом ASCII, поэтому я предполагаю, что исходный файл не закодирован в ASCII. Изменение типа кодировки в UTF разрешит проблему, но трудно понять, действительно ли это подходит для ваших требований.

using (var sr = new StreamReader(readFile, new UTF8Encoding())) 
{ 
    using (var sw = new StreamWriter(writeFile, new UTF8Encoding())) 

См. http://www.asciitable.com/ fpr действительный список символов ascii.

+0

Я проверил несколько сайтов, которые дали мне 166 в качестве значения ASCII для |, поэтому я предположил, что он был частью набора ASCII –

0

Это исправлено с использованием Encoding.Default вместо ASCIIEncoding.

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