我正在使用下面的代码来读取包含外来字符的文本文件,该文件是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文件?
答案 0 :(得分:119)
您也可以尝试使用当前系统的ANSI代码页的默认编码。
StreamReader reader = new StreamReader(inputFilePath, Encoding.Default, true)
当您尝试将记事本“另存为”菜单与原始文件一起使用时,请查看编码组合框。它会告诉你文件使用了哪种编码记事本。
此外,如果它是ANSI文件,则detectEncodingFromByteOrderMarks参数可能没什么用。
答案 1 :(得分:23)
是的,可能是文件的实际编码,可能是unicode。尝试使用UTF-8,因为这是最常见的unicode编码形式。否则,如果文件ASCII然后标准ASCII编码应该工作。
答案 2 :(得分:21)
我遇到了同样的问题,我的解决方案很简单:而不是
Encoding.ASCII
使用
Encoding.GetEncoding("iso-8859-1")
找到了答案here。
编辑:更多解决方案。这可能更准确:
Encoding.GetEncoding(1252);
此外,在某些情况下,如果您的操作系统默认编码与文件编码匹配,这也适用于您:
Encoding.Default;
答案 3 :(得分:9)
使用Encoding.Unicode将无法准确解码ANSI文件,就像JPEG解码器无法理解GIF文件一样。
我很惊讶Encoding.Default
对于ANSI文件不起作用,如果它真的是 ANSI - 如果您确实找到哪个代码页记事本正在使用,您可以使用Encoding.GetEncoding(int)
。
一般情况下,我建议尽可能使用UTF-8。
答案 4 :(得分:7)
尝试使用其他编码,例如Encoding.UTF8。您也可以尝试让StreamReader找到编码本身:
StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.UTF8, true)
编辑:刚刚看到您的更新。尝试让StreamReader做猜测。
答案 5 :(得分:3)
File.OpenText()始终隐式使用UTF-8 StreamReader。创建自己的StreamReader 而是实例,并指定所需的编码。 喜欢
using (StreamReader reader = new StreamReader(@"C:\test.txt", Encoding.Default)
{
// ...
}
答案 6 :(得分:0)
我解决了阅读葡萄牙语字符的问题,更改了记事本++上的源文件。
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();
}
答案 7 :(得分:0)
对于阿拉伯语,我使用了Encoding.GetEncoding(1256)
。它运作良好。
答案 8 :(得分:0)
对于瑞典语ÅÄÖ,上述解决方案唯一的解决方案是:
Encoding.GetEncoding("iso-8859-1")
希望这可以节省一些时间。
答案 9 :(得分:0)
我还在读取包含法语和德语的导出文件。我使用了Encoding.GetEncoding(“ iso-8859-1”),此方法可以实现,没有任何挑战。