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

4 回答 4

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 - 它们是非常方便的实用程序方法。

于 2008-12-03T10:48:00.417 回答
8

如果是简体中文通常是 gb2312,对于繁体中文通常是 Big5:

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

// Big5 (codepage 950) :
System.Text.Encoding.GetEncoding(950)
于 2010-08-22T16:18:39.427 回答
1

改为使用Encoding.Unicode

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

于 2008-12-03T10:44:32.997 回答
0

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

干杯,

罗纳德

于 2015-06-12T09:35:28.773 回答