首页 新闻 会员 周边

StreamReader读取内容与原内容不一致

0
悬赏园豆:5 [待解决问题]
FileStream fs = File.Open(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "file/file.txt"), FileMode.Open);
            StreamReader reader = new StreamReader(fs);
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                Console.Write(line);
            }

程序如下,结果如下:

问题补充:

问题找到了,StreamReader读取的内容是正常的。

问题出在Console.write方法上,用此方法输出后内容就变了

caochao88的主页 caochao88 | 初学一级 | 园豆:4
提问于:2012-09-23 16:03
< >
分享
所有回答(4)
0

原理上来讲应该是一致的,

可能出现的问题应该是不可见字符或者文件编码导致的

田林九村 | 园豆:2367 (老鸟四级) | 2012-09-23 16:58

我试过,编码都弄成utf-8,内容还是不一样。后来换成汉字又可以。估计是有些不可见字条导致的

支持(0) 反对(0) caochao88 | 园豆:4 (初学一级) | 2012-09-23 17:00
0

程序显示的是正确的,比如你新建一个txt输入一个“要”字保存,再用记事本打开看就是乱码了,原因就是记事本把前面几个字节当作它的文件头截取了,导致显示不正确。

向往-SONG | 园豆:4853 (老鸟四级) | 2012-09-23 19:36

你说的bom?怎么避免?

支持(0) 反对(0) caochao88 | 园豆:4 (初学一级) | 2012-09-23 19:42
0

reader.readend这个方法试试,还有可以提供一个编码类型给

StreamReader 
chenping2008 | 园豆:9836 (大侠五级) | 2012-09-23 19:56

试过了,木有用

支持(0) 反对(0) caochao88 | 园豆:4 (初学一级) | 2012-09-23 19:57
0

Console.write方法没有错,我给你解释下这行代码的意思:line = reader.ReadLine(),将输入流的字节按照默认编码方式转换为UNICODE字符串。

所以,如果出错,也应该是  reader.ReadLine() 的问题。

StreamReader reader = new StreamReader(fs,Encoding.GetEncoding("gb2312"));

你可以尝试修改 Encoding 来测试你的 txt 用哪种字符编码能够正确读取文件内容。

 

Launcher | 园豆:45045 (高人七级) | 2012-09-24 09:19

我的文件编码方式是utf8,读的时候也指定了utf8。读的时候断点看了内容是一致的,但用Console.writeLine方法输出到控制台后发现少了几行内容。

支持(0) 反对(0) caochao88 | 园豆:4 (初学一级) | 2012-09-24 14:21

@tudas: 你用的 Console.Write(line); 这个会追加,不会自动换行,但是Console窗口会自动换行显示,同时Console还会限制输出行的个数。

你用 Console.writeLine 的时候,你可以设置一个短信,每写一行,你就去控制台窗口看下。

你还可以用System.Diagnostics.Debug.WriteLine在“输出”窗口观察输出内容。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2012-09-24 14:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册