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