可以';t从文件中读取国际字符

本文关键字:读取 字符 文件 可以 | 更新日期: 2023-09-27 18:20:19

我试图从文件中读取葡萄牙语字符,但一直遇到问题。

我有以下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"。

我做错了什么?

可以';t从文件中读取国际字符

您需要使用正确的编码读取文件-默认情况下,文件将以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]);
    }
}