1、这是因为汉字保存在磁盘中的编码有多种,常见的有:GB、BIG5 、Unicode、UTF-7、UTF-8等。如果在打开文本文件时,没有指定相应的格式,就会出现乱码的问题。
C#中的System.Text.Encoding就是一个起到完成指定编码作用的类。
2、下面演示System.Text.Encoding类的用法,新建一个C#工程,添加一个textBox控件、一个button、一个openFileDialog。
为button1的Click事件添加下列代码:
privatevoidbutton1_Click(objectsender,System.EventArgse){openFileDialog1.ShowDialog();}为openFileDialog1的FileOk事件添加如下代码:
privatevoidopenFileDialog1_FileOk(objectsender,System.ComponentModel.CancelEventArgse){if(!e.Cancel){StreamReadersr=newStreamReader(openFileDialog1.FileName);
textBox1.Text=sr.ReadToEnd();
sr.Close();}}编译运行,打开包含中文的文本文件,出现乱码。
将openFileDialog1的FileOk事件改写为如下代码:
privatevoidopenFileDialog1_FileOk(objectsender,System.ComponentModel.CancelEventArgse){if(!e.Cancel){StreamReadersr=newStreamReader(openFileDialog1.FileName,Encoding.Default);
textBox1.Text=sr.ReadToEnd();
sr.Close();}}重新编译运行,此时打开包含中文的文本文件,无乱码出现。
把两种方式都写上,实际使用时,让使用者自己选择。
实现中,也有用错误的编辑器打开不相关类型文件的情况啊,想动态根据文件编码方式去确定打开方式,我觉得只能通过其他附加条件去判断了,你想实现多种编码方式的文件读取貌似没有简单可行的办法,要不也不会又那么多不同编码格式的文本编辑器存在了,直接一个万能文本编辑器搞定。
用byte读取流保存下来,如果一个编码出错,就用另外的编码去转换。直到正确为止。这样就可以通用了。
好像可以判断文件的前面。。。