我正在使用下面的代码来读取包含外来字符的文本文件,该文件是ANSI编码的,在记事本中看起来很好.下面的代码不起作用,当读取文件值并在数据网格中显示字符显示为正方形时,其他地方是否会出现其他问题?
StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.ANSI);
using (reader = File.OpenText(inputFilePath))
Run Code Online (Sandbox Code Playgroud)
谢谢
更新1:我已经尝试了所有编码System.Text.Encoding.并且都无法正确显示文件.
更新2:我已经将文件编码(重新保存文件)更改为unicode并使用,System.Text.Encoding.Unicode并且它工作得很好.那么为什么记事本读得正确呢?为什么没有System.Text.Encoding.Unicode读取ANSI文件?
Jer*_*ban 125
您也可以尝试使用当前系统的ANSI代码页的默认编码.
StreamReader reader = new StreamReader(inputFilePath, Encoding.Default, true)
Run Code Online (Sandbox Code Playgroud)
当您尝试将记事本"另存为"菜单与原始文件一起使用时,请查看编码组合框.它将告诉您文件使用的记事本猜测的编码.
此外,如果它是ANSI文件,则detectEncodingFromByteOrderMarks参数可能没有多大帮助.
ser*_*rop 23
我有同样的问题,我的解决方案很简单:而不是
Encoding.ASCII
Run Code Online (Sandbox Code Playgroud)
使用
Encoding.GetEncoding("iso-8859-1")
Run Code Online (Sandbox Code Playgroud)
答案在这里找到.
编辑:更多解决方案.这可能更准确一个:
Encoding.GetEncoding(1252);
Run Code Online (Sandbox Code Playgroud)
此外,在某些情况下,如果您的操作系统默认编码与文件编码匹配,这也适用于您:
Encoding.Default;
Run Code Online (Sandbox Code Playgroud)
使用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)
Run Code Online (Sandbox Code Playgroud)
编辑:刚刚看到您的更新.尝试让StreamReader做猜测.
对于瑞典语 \xc3\x85 \xc3\x84 \xc3\x96 ,上述工作的唯一解决方案是:
\n\nEncoding.GetEncoding("iso-8859-1")\nRun Code Online (Sandbox Code Playgroud)\n\n希望这会节省某人的时间。
\n