在使用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,,来确定文件的编码方式,应该一劳永逸了,有空了研究下.