C#帮助使用StreamReader读取外来字符
我使用下面的代码来读取包含外部字符的文本文件,该文件被编码为ANSI,并且在记事本中看起来很好。 下面的代码不起作用,当文件值被读取并显示在数据网格中的字符显示为正方形时,其他地方是否会出现另一个问题?
StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.ANSI); using (reader = File.OpenText(inputFilePath))
谢谢
更新1 :我已经尝试在System.Text.Encoding
下find的所有编码。 而且都不能正确显示文件。
更新2 :我已经改变了文件编码(重新保存文件)为Unicode并使用System.Text.Encoding.Unicode
,它工作得很好。 那为什么记事本正确的读了它? 为什么没有System.Text.Encoding.Unicode
读取ANSI文件?
是的,它可能是文件的实际编码,可能是unicode。 试试UTF-8,因为这是最常见的unicode编码forms。 否则,如果文件ASCII然后标准ASCII编码应该工作。
您也可以尝试使用当前系统的ANSI代码页的默认编码。
StreamReader reader = new StreamReader(inputFilePath, Encoding.Default, true)
当您尝试使用原始文件的记事本“另存为”菜单时,查看编码combobox。 它会告诉你哪个编码记事本猜测被文件使用。
另外,如果它是一个ANSI文件,detectEncodingFromByteOrderMarks参数可能没有多大帮助。
我有同样的问题,我的解决scheme很简单:而不是
Encoding.ASCII
使用
Encoding.GetEncoding("iso-8859-1")
答案在这里find。
编辑:更多解决scheme。 这可能更准确一个:
Encoding.GetEncoding(1252);
此外,在某些情况下,如果您的操作系统默认编码与文件编码匹配,这也可以适用于您:
Encoding.Default;
使用Encoding.Unicode不会像JPEG解码器不能理解GIF文件那样准确地解码ANSI文件。
我感到惊讶的是, Encoding.Default
没有为ANSI文件工作,如果它真的是 ANSI – 如果你find确切哪个代码页记事本正在使用,您可以使用Encoding.GetEncoding(int)
。
一般来说,我会build议使用UTF-8。
尝试使用不同的编码,例如Encoding.UTF8。 你也可以尝试让StreamReader自己find编码:
StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.UTF8, true)
编辑:刚才看到你的更新。 试着让StreamReader做猜测。
File.OpenText()总是隐式使用UTF-8 StreamReader。 创build自己的StreamReader实例,并指定所需的编码。 喜欢
using (StreamReader reader = new StreamReader(@"C:\test.txt", Encoding.Default) { // ... }
我解决了阅读葡萄牙文字符的问题,改变了记事本++上的源文件。
C#
var url = System.Web.HttpContext.Current.Server.MapPath(@"~/Content/data.json"); string s = string.Empty; using (System.IO.StreamReader sr = new System.IO.StreamReader(url, System.Text.Encoding.UTF8,true)) { s = sr.ReadToEnd(); }
对于阿拉伯语,我使用Encoding.GetEncoding(1256)
。 它运作良好。