C#使用StreamReader帮助阅读外来字符

C#使用StreamReader帮助阅读外来字符,c#,encoding,C#,Encoding,我正在使用下面的代码读取一个包含外来字符的文本文件,该文件编码为ANSI,在记事本中看起来很好。下面的代码不起作用,当文件值被读取并显示在datagrid中时,字符显示为正方形,其他地方会有其他问题吗 StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.ANSI); using (reader = File.OpenText(inputFilePath)) 谢谢 更新1:我已经尝试了在System

我正在使用下面的代码读取一个包含外来字符的文本文件,该文件编码为ANSI,在记事本中看起来很好。下面的代码不起作用,当文件值被读取并显示在datagrid中时,字符显示为正方形,其他地方会有其他问题吗

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文件?

是的,可能是文件的实际编码,可能是Unicode。尝试UTF-8,因为这是最常见的unicode编码形式。否则,如果文件为ASCII,则应使用标准ASCII编码。

尝试其他编码,如encoding.UTF8。您还可以尝试让StreamReader找到编码本身:

    StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.UTF8, true)

编辑:刚刚看到你的更新。尝试让StreamReader进行猜测。

您也可以尝试默认编码,它使用当前系统的ANSI代码页

StreamReader reader = new StreamReader(inputFilePath, Encoding.Default, true)
当您尝试对原始文件使用记事本“另存为”菜单时,请查看“编码”组合框。它将告诉您该文件使用的是猜测的编码记事本


此外,如果它是ANSI文件,detectEncodingFromByteOrderMarks参数可能不会有多大帮助。

使用编码。Unicode无法像JPEG解码器无法理解GIF文件那样准确地解码ANSI文件

我很惊讶
Encoding.Default
对ANSI文件不起作用,如果它真的是ANSI文件-如果你知道记事本使用的是哪个代码页,你可以使用它

一般来说,如果可能,我建议使用UTF-8。

File.OpenText()始终隐式使用UTF-8 StreamReader。创建自己的StreamReader 实例,并指定所需的编码。 像


我也有同样的问题,我的解决办法很简单:而不是

Encoding.ASCII
使用

找到了答案

编辑:更多解决方案。这可能更准确:

Encoding.GetEncoding(1252);
此外,在某些情况下,如果您的操作系统默认编码与文件编码匹配,这也适用于您:

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

对于瑞典语ÄÖ,上述工作的唯一解决方案是:

Encoding.GetEncoding("iso-8859-1")

希望这能节省一些时间。

我还在阅读一个导出的文件,其中包含法语和德语。我使用Encoding.GetEncoding(“iso-8859-1”),这是正确的,没有任何挑战

你确定它是用ANSI编码的吗?有时记事本会尝试“最佳猜测”,并使用与预期不同的编码。如果记事本确定某个文件不是Unicode或UTF-8,它将返回系统区域设置(在“控制面板->区域和语言”区域中设置)。使用默认编码对我有效。我有被StreamReader跳过的字符,并将其更改为默认编码,以便正确读取。谢谢编码。默认为我工作。。。ANSI格式的西班牙语字符的读写方式与%^和?在使用Encoding.Default.Encoding.Default之前,它也适用于我。葡萄牙语在这里很受欢迎。我正在使用几种不同的语言,唯一的解决方案是在
StreamReader
的初始化中使用
Encoding.Default,true
。六年后,这个答案帮助了我:我的问题是使用
StringBuilder
并输出到
HttpResponseMessage
,而且口音正在被替换。这起作用了,(
result
is
HttpResponseMessage
result.Content=newstringcontent(csv.ToString(),Encoding.GetEncoding(“iso-8859-1”)newstreamreader(memoryStream,Encoding.UTF8)
不起作用,但
newstreamreader(memoryStream,Encoding.GetEncoding(“iso-8859-1”)
起作用了!修复了某人决定使用的¾(扩展ascii,而不是unicode)的问题。
    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("iso-8859-1")