文本文件中读取中文乱码的问题

在使用StreamReader  读取文本文件时,如果不指明字符编码时,如果文本中包含汉字,其返回的结果就会成为乱码,这是因为其默认的编码方式UTF-8,这种编码并不支持汉字,所以我门需要指定汉字编码方式

我门可以指定GB2312编码方式,从而支持汉字

StreamReader strstream=new StreamReader(filepath,System.Text.Encoding.GetEncoding("gb2312"));
string str=strstream.ReadToEnd();
strstream.Close();

也可以使用系统的当前ANSI代码页的编码

StreamReader strstream=new StreamReader(filepath,System.Text.Encoding.Default);
string str=strstream.ReadToEnd();
strstream.Close();

StreamWriter保存txt文件时也要这样指明编码方式

追其乱码的根源,也就是我们在读取的时候使用的编码方式和写入的时候使用的编码方式不一样造成的,所以如果我们能从文本中读取其写入的时候的编码方式,其不是万事大吉,

经查,文本编辑器在生成文本文件时,如果编码格式和系统默认的编码(中文系统下默认为GB2312)不一致时,会在txt文件开头部分添加特定的“编码字节序标识(Encoding Bit Order Madk,简写BOM)”,这样它在读取时就可以根据这个BOM来确定该文本文件生成时所使用的Encoding。这个BOM用记事本等程序打开默认是看不到的,但是用stream按字节读取时是可以读到的。

基于这个理论,我想可以读取BOM,,来确定文件的编码方式,应该一劳永逸了,有空了研究下.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值