StreamReader读取文件时出现乱码的解决方案

今天在做一个打开文件对话框OpenFileDialog时,需要对打开的文件进行读取,显示在在窗体中的RichTextBox中。但是在显示文件时,却发现显示的中文字符串出现乱码。代码的关键部分如下所示:

1 StreamReader sr = new StreamReader(openFileDialog.OpenFile());
2 string str = sr.ReadToEnd();
3 childForm.richTextBox1.Text = str;  

开始我也想到了是字符编码出了问题,于是我在初始化StreamReader时,给它加了字符编码参数,加了好几次,Encoding.Unicode,Encoding.UTF32,Encoding.UTF7,Encoding.UTF8,Encoding.ASCII,这些能加的编码方案我都试过了,结果都不行,还是会乱码。百般无奈之下,我只好在.net爱好者群里问了。然后群里就有好心人给我发了一个链接,点进去看了之后恍然大悟。链接如下所示:

http://www.cnblogs.com/wmw1989/archive/2008/05/19/1202500.html

原来,中文编码是GB2312,而当前系统的代码页的编码方案采用的是ANSI编码,出现乱码也就不足为奇了。解决方案很简单,就是初始化StreamReader的时候告诉它目前代码页的编码方案。可是由于Encoding类并没有定义ANSI编码方案,所以只能采用Default让系统获取当前操作系统的当前ANSI代码页的编码方案。因此上面的代码换成如下的代码就解决了:

1 StreamReader sr = new StreamReader(openFileDialog.OpenFile(), Encoding.Default);
2 string str = sr.ReadToEnd();
3 childForm.richTextBox1.Text = str;  

时间: 2024-10-10 21:36:13

StreamReader读取文件时出现乱码的解决方案的相关文章

C#中StreamReader读取中文时出现乱码问题总结

之前有一篇文章" C#读取及写入配置文件教程"(http://blog.csdn.net/lisenyang/article/details/47291083)当中有一个问题就是在读取配置文件时候中文出现乱码情况.这是为什么呢?原因是自Windows 2000之后的操作系统在文件处理时默认编码採用Unicode.所以.NET文件的默认编码也是Unicode.除非另外指定,StreamReader的默认编码为Unicode,而不是当前系统的ANSI代码页.可是文档大部分还是以ANSI编码

MySQL命令行导入sql文件时出现乱码解决方案

Note: sql> source F:weibo.sql(执行相关sql文件) sql> select * from sina into outfile "/weibo.txt"(导出相应数据到C:的weibo.txt) 1. mysql 5.0后其客户端仅支持gbk,故可在sql> set names gbk; 例如: set names gbk; /* Navicat MySQL Data Transfer Source Server : localhost_3

【转】C#读取文件时的共享方式

string sFileName = @"C:\Exchange.dat";System.IO.StreamReader file = new System.IO.StreamReader(sFileName);string sTxt = file.ReadLine();file.Close();在这个代码中,C#读取文件时,默认是Read模式,即它打开文件后,别的应用程序只能读取该文件而不能修改文件. 如果要别的应用程序在它打开该文件的时候也能修改该文件,则需要指定模式为ReadWr

解决Python读取文件时出现UnicodeDecodeError: 'gbk' codec can't decode byte...

用Python在读取某个html文件时会遇到下面问题: 出问题的代码: 1 if __name__ == '__main__': 2 fileHandler = open('../report.html', mode='r') 3 4 report_lines = fileHandler.readlines() 5 for line in report_lines: 6 print(line.rstrip()) 修改方式是在open方法指定参数encoding='UTF-8': if __nam

fstream读取文件时如何判断读到文件尾

使用fstream读取文件,什么时候读到文件结束呢.首先想到的是,将现在的位置与文件的长度对比,然后再fstream中无法直接获取文件长度.可以采用如下方法 fstream in; in.open("path",ios::in); in.seekg(0,ios::end); int length=in.tellg(); in.seekg(0.ios::beg); whiel(in.tellg()<length) { dosomething; } 这样是不是有点麻烦,在网上查了一圈

FileSystemWatcher 读取文件时出现被占用的解决方法

今天做一个小程序监控目录并序列化XML时遇到第一次正常,第二个新文件加入时出现文件被占用的错误,记录下解决方法. 1 FileSystemWatcher watcher = new FileSystemWatcher{ 2 Path = path, 3 Filter = filter, 4 EnableRaisingEvents = true, 5 IncludeSubdirectories = true, 6 NotifyFilter = NotifyFilters.Attributes |

使用 python urllib2 抓取网页时出现乱码的解决方案

这里记录的是一个门外汉解决使用 urllib2 抓取网页时遇到乱码.崩溃.求助.解决和涨经验的过程.这类问题,事后看来只是个极小极小的坑,不过竟然花去很多时间,也值得记录一下.过程如下:目标: 抓取 http://sports.sina.com.cn/g/premierleague/index.shtml 代码: 1 2 3 4 5 6 # coding: u8 import urllib2 url = "http://sports.sina.com.cn/g/premierleague/ind

Ajax读取文件时出现的缓存问题

对于Ajax缓存问题时,由于浏览器的版本问题,有时候当服务器端已更改文件中的内容,而客户端并得不到更新后的文件,而是延续之前的文件内容,解决办法是:在读取的文件内容后加一串的地址:JSON的格式为[{a:4,b:5},{c:5,d:6}]这种格式. 比如下面 window.onload=function(){var oBtn=document.getElementById('btn1');oBtn.onclick=function(){ajax('1.txt?t='+new Date().get

php读取文件时多了个%uFEFF[bom字符],怎样去掉?

今天从记事本文件中读取静态生成记录时,发现读出来的第一个链接打开的时候总是提示非法操作,把鼠标放到链接上发现链接的前面多了个%uFEFF, 百度一查,原来这是好多人都有遇到过的bom头问题,特地记录下 解决方法就是直接使用trim函数去除,例如我的代码: $getcon=trim(file_get_contents("./LabT/WebF/View/SaveHtml/fileList.txt"),"\xEF\xBB\xBF");此方法也可以解决json_decod