如何从C#中读取中文文本?

如何使用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()); } 

您需要对文件使用正确的编码。 你知道编码是什么吗? 它可能是UTF-16,又名Encoding.Unicode,或者可能是Big5。 真的,你应该试着找出肯定而不是猜测。

正如leppie的回答所提到的,问题也可能是控制台的function。 要确定,请将字符串的Unicode字符值转储为数字。 有关更多信息,请参阅我关于调试unicode问题的文章,以及转储字符串内容的有用方法。

我也会避免使用您当前用于逐行读取文件的代码。 相反,使用类似的东西:

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

调用Peek()要求流能够搜索,这对于文件而不是所有流都可能是正确的。 还要查看File.ReadAllText和File.ReadAllLines,如果这是你想要做的 – 它们是非常方便的实用方法。

如果它是简体中文,通常是gb2312,对于传统的中文,它通常是Big5:

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

请改用Encoding.Unicode

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

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

干杯,

罗纳德