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) 。 它运作良好。