2012-01-16 6 views
0

Я пытаюсь читать португальские символы из файлов и постоянно сталкиваться с проблемами.Невозможно прочитать международные символы из файлов

У меня есть следующий C# код (для тестирования):

var streamReader = new StreamReader("file.txt"); 

while (streamReader.Peek() >= 0) 
{ 
    var buffer = new char[1]; 
    streamReader.Read(buffer, 0, buffer.Length); 
    Console.Write(buffer[0]); 
} 

Он читает каждый символ в файле, а затем выводит его на консоль. Файл содержит следующее: "cãsa". Выход в консоли: «c? Sa».

Что я делаю неправильно?

+0

Посмотрите на конструкторы 'StreamReader'. Вы можете указать кодировку. –

+0

Если вы выполняете Console.Write («cãsa»), как вы его видите на консоли? – drf

+0

Вам нужно знать (узнать), какая кодировка использовалась для записи файлов. –

ответ

2

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

В этом примере я использую перегрузку конструктора, который принимает кодировку, в данном случае UnicodeEncoding, который является UTF-16:

using(var streamReader = new StreamReader("file.txt", Encoding.UnicodeEncoding)) 
{ 
    while (streamReader.Peek() >= 0) 
    { 
     var buffer = new char[1]; 
     streamReader.Read(buffer, 0, buffer.Length); 
     Console.Write(buffer[0]); 
    } 
} 

В этом примере я использую кодовую страницу 860, что соответствует португальски :

using(var streamReader = new StreamReader("file.txt", Encoding.GetEncoding(860))) 
{ 
    while (streamReader.Peek() >= 0) 
    { 
     var buffer = new char[1]; 
     streamReader.Read(buffer, 0, buffer.Length); 
     Console.Write(buffer[0]); 
    } 
} 
+0

@PeterEvjan - Это были просто _examples_. Вам нужно выяснить, какая кодировка текстового файла была сохранена, и использовать то же самое для его чтения. Как вы можете себе представить, у меня нет такой информации. – Oded

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