Не могу прочитать международные символы из файлов - PullRequest
0 голосов
/ 16 января 2012

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

У меня есть следующий код 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".

Что я делаю не так?

1 Ответ

2 голосов
/ 16 января 2012

Вам необходимо прочитать файл, используя правильную кодировку - по умолчанию файл будет читаться как 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]);
    }
}
...