如何使用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());
}
答案 0 :(得分:8)
您需要对文件使用正确的编码。你知道编码是什么吗?它可能是UTF-16,又名Encoding.Unicode,或者可能是Big5。真的,你应该尽力找出而不是猜测。
正如leppie的回答所提到的,问题也可能是控制台的功能。要确定,请将字符串的Unicode字符值转储为数字。有关更多信息和转储字符串内容的有用方法,请参阅我的article on debugging unicode issues。
我还会避免使用您当前用于逐行读取文件的代码。相反,使用类似的东西:
using (StreamReader sr = new StreamReader(path, appropriateEncoding))
{
string line;
while ( (line = sr.ReadLine()) != null)
{
// ...
}
}
调用Peek()要求流能够搜索,这对于文件而不是所有流都可能是正确的。如果你想做的话,还要研究File.ReadAllText和File.ReadAllLines - 它们是非常方便的实用方法。
答案 1 :(得分:4)
如果它是简体中文,通常是gb2312,对于繁体中文,它通常是Big5:
// gb2312 (codepage 936) :
System.Text.Encoding.GetEncoding(936)
// Big5 (codepage 950) :
System.Text.Encoding.GetEncoding(950)
答案 2 :(得分:1)
改为使用 Encoding.Unicode
。
我认为您需要更改控制台的OutputEncoding以正确显示它。
答案 3 :(得分:0)
我刚刚遇到了与你相同的问题,现在我解决了。我认为主要的问题是来自txt编辑器。使用记事本以.txt格式保存文本时,可以在底部选择编码。默认编码是ANSI,它不支持中文流读取(取决于您的计算机),而Unicode适用于中文文本。我希望这会对你有所帮助:)。
干杯,
罗纳德