无法从文件中读取国际字符

时间:2012-01-16 10:06:33

标签: c# .net encoding character-encoding internationalization

我正在尝试从文件中读取葡萄牙语字符,并不断遇到问题。

我有以下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 个答案:

答案 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]);
    }
}