可以';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"。
我做错了什么?
您需要使用正确的编码读取文件-默认情况下,文件将以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]);
}
}