c# 怎样根据Txt文件编码选择正确的编码方式打开?

StreamReadersr=newStreamReader(fileName,System.Text.Encoding.GetEncoding(936),true);或... StreamReader sr = new StreamReader(fileName, System.Text.Encoding.GetEncoding(936), true);

StreamReader sr = new StreamReader(@fileName, System.Text.Encoding.GetEncoding(936), true);
我看网上都说这么搞,但我都试了下,均无法根据文件的编码自动的选择正确的编码,后面的那个true没用(改成false也没用);只要有中间的那个System.Text.Encoding.GetEncoding(936),打开多个TXT时,ASC的都能正确打开,UTF-8的就不能,如果没它,UTF-8的能正确打开,ASC的就不能,我还没试其他的呢.
求教!
最近研究了下发现StreamReader sr = new StreamReader(fileName, System.Text.Encoding.GetEncoding(936), true);还是有用的,只是我以前的那个UTF-8文档不知道是怎么回事,和其它的UTF-8文档不一样,文件头和其它的UTF-8文档不一样,但用记事本另存时显示它是UTF-8的
展开
 我来答
倔强嘚玫瑰
2015-10-31 · TA获得超过4001个赞
知道大有可为答主
回答量:3741
采纳率:85%
帮助的人:912万
展开全部
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();}}重新编译运行,此时打开包含中文的文本文件,无乱码出现。
tattackor
2015-08-28 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:890万
展开全部
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();}}重新编译运行,此时打开包含中文的文本文件,无乱码出现。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友02cd4ce
2011-04-14 · TA获得超过516个赞
知道小有建树答主
回答量:709
采纳率:0%
帮助的人:719万
展开全部
把两种方式都写上,实际使用时,让使用者自己选择。
实现中,也有用错误的编辑器打开不相关类型文件的情况啊,想动态根据文件编码方式去确定打开方式,我觉得只能通过其他附加条件去判断了,你想实现多种编码方式的文件读取貌似没有简单可行的办法,要不也不会又那么多不同编码格式的文本编辑器存在了,直接一个万能文本编辑器搞定。
追问
难道必须,先用streamreader.把文件读出,再取前三个字节分析把取得的文件编码信息赋值给一个变量,然后close创建的streamreader对象,再重新读一次吗?
我看MSDN和网上的人家说的StreamReader sr = new StreamReader(@fileName, System.Text.Encoding.GetEncoding(936), true);貌似能够实现,但怎么实验都不行,ASC码的正常了,UTF-8的就不正常,UTF正常了,ASC的就不正常了.
追答
具体的我也不清楚,不过我建议楼主先放一放,这个可以算是你的程序的一个小缺陷,后面有新的想法和思路了再考虑,你应该还有其他功能实现要做吧?免得钻牛角尖了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-08-01
展开全部
用byte读取流保存下来,如果一个编码出错,就用另外的编码去转换。直到正确为止。这样就可以通用了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-07-31
展开全部
好像可以判断文件的前面。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式