我正在使用下面的代码来读取包含外来字符的文本文件,该文件是ANSI编码的,在记事本中看起来很好.下面的代码不起作用,当读取文件值并在数据网格中显示字符显示为正方形时,其他地方是否会出现其他问题?
StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.ANSI); using (reader = File.OpenText(inputFilePath))
谢谢
更新1:我已经尝试了所有编码System.Text.Encoding
.并且都无法正确显示文件.
更新2:我已经将文件编码(重新保存文件)更改为unicode并使用,System.Text.Encoding.Unicode
并且它工作得很好.那么为什么记事本读得正确呢?为什么没有System.Text.Encoding.Unicode
读取ANSI文件?
您也可以尝试使用当前系统的ANSI代码页的默认编码.
StreamReader reader = new StreamReader(inputFilePath, Encoding.Default, true)
当您尝试将记事本"另存为"菜单与原始文件一起使用时,请查看编码组合框.它将告诉您文件使用的记事本猜测的编码.
此外,如果它是ANSI文件,则detectEncodingFromByteOrderMarks参数可能没有多大帮助.
是的,可能是文件的实际编码,可能是unicode.尝试使用UTF-8,因为这是最常见的unicode编码形式.否则,如果文件ASCII然后标准ASCII编码应该工作.
我有同样的问题,我的解决方案很简单:而不是
Encoding.ASCII
使用
Encoding.GetEncoding("iso-8859-1")
答案在这里找到.
编辑:更多解决方案.这可能更准确一个:
Encoding.GetEncoding(1252);
此外,在某些情况下,如果您的操作系统默认编码与文件编码匹配,这也适用于您:
Encoding.Default;
使用Encoding.Unicode将无法准确解码ANSI文件,就像JPEG解码器无法理解GIF文件一样.
我很惊讶,Encoding.Default
如果它确实是 ANSI,那么对ANSI文件不起作用- 如果你确切地发现记事本正在使用哪个代码页,你可以使用Encoding.GetEncoding(int)
.
一般来说,我建议尽可能使用UTF-8.
尝试使用其他编码,例如Encoding.UTF8.您也可以尝试让StreamReader找到编码本身:
StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.UTF8, true)
编辑:刚刚看到您的更新.尝试让StreamReader做猜测.