如何在C#中读取一个中文文本文件?

4
我该如何使用C#读取中文文本文件?我的当前代码无法显示正确的字符:
try
{    
    using (StreamReader sr = new StreamReader(path,System.Text.Encoding.UTF8))
    {
        // This is an arbitrary size for this example.
        string c = null;

        while (sr.Peek() >= 0)
        {
            c = null;
            c = sr.ReadLine();
            Console.WriteLine(c);
        }
    }
}
catch (Exception e)
{
    Console.WriteLine("The process failed: {0}", e.ToString());
}
4个回答

8

如果是简体中文,通常使用 GB2312 编码,而对于繁体中文,则通常使用 Big5 编码:

// gb2312 (codepage 936) :
System.Text.Encoding.GetEncoding(936)

// Big5 (codepage 950) :
System.Text.Encoding.GetEncoding(950)

8

你需要为文件使用正确的编码。你知道那种编码是什么吗?可能是UTF-16,也就是Encoding.Unicode,或者像Big5这样的编码。但最好不要猜测,要确切地找出来。

正如leppie的答案所提到的,问题也可能是控制台的功能限制。要确切地找出原因,可以把字符串的Unicode字符值按数字顺序输出。请参考我的Unicode问题调试文章获取更多信息和一种有用的方法,可以将字符串内容转储出来。

此外,我建议避免使用你目前正在使用的逐行读取文件的代码。相反,使用类似于以下的代码:

using (StreamReader sr = new StreamReader(path, appropriateEncoding))
{
    string line;
    while ( (line = sr.ReadLine()) != null)
    {
        // ...
    }
}

调用Peek()需要流具有寻址能力,这对于文件可能是正确的,但不适用于所有流。如果您想要这样做,请查看File.ReadAllTextFile.ReadAllLines - 它们是非常方便的实用方法。

1

使用Encoding.Unicode代替。

我认为您需要更改控制台的OutputEncoding以正确显示它。


0
我刚遇到了和你一样的问题,现在我已经解决了。我认为主要问题可能来自于文本编辑器。当你使用记事本将文本保存为.txt格式时,你可以在底部选择编码方式。默认编码是ANSI,它不支持中文流读取(取决于你的电脑),而Unicode适用于中文文本。希望这能帮到你:)
祝好,
罗纳德

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接