如何从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适用于中文文本。 我希望这能帮到您 :)
干杯,
罗纳德