我正在尝试从文件中读取葡萄牙语字符,并不断遇到问题。
我有以下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 :(得分: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]);
}
}