当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《C#帮助使用StreamReader读取外来字符》经验,为你挑选了5个好方法。

我正在使用下面的代码来读取包含外来字符的文本文件,该文件是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文件?



1> Jerome Laban..:

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

StreamReader reader = new StreamReader(inputFilePath, Encoding.Default, true)

当您尝试将记事本"另存为"菜单与原始文件一起使用时,请查看编码组合框.它将告诉您文件使用的记事本猜测的编码.

此外,如果它是ANSI文件,则detectEncodingFromByteOrderMarks参数可能没有多大帮助.


使用默认编码对我有用。我有被StreamReader跳过的char(Â),并将其更改为默认的Encoding可以正确读取。谢谢!

2> Quintin Robi..:

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



3> serop..:

我有同样的问题,我的解决方案很简单:而不是

Encoding.ASCII

使用

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

答案在这里找到.

编辑:更多解决方案.这可能更准确一个:

Encoding.GetEncoding(1252);

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

Encoding.Default;



4> Jon Skeet..:

使用Encoding.Unicode将无法准确解码ANSI文件,就像JPEG解码器无法理解GIF文件一样.

我很惊讶,Encoding.Default如果它确实 ANSI,那么对ANSI文件不起作用- 如果你确切地发现记事本正在使用哪个代码页,你可以使用Encoding.GetEncoding(int).

一般来说,我建议尽可能使用UTF-8.



5> Jakob Christ..:

尝试使用其他编码,例如Encoding.UTF8.您也可以尝试让StreamReader找到编码本身:

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

编辑:刚刚看到您的更新.尝试让StreamReader做猜测.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有