c#中的File类为我们提供了方便的文件读写方法,本来写文件的时候,我是从来不写编码格式的,后来发现,读文件的时候,有时候会出现乱码。
WriteAllText和ReadAllText的默认编码格式是什么呢?自己新建的txt文件又是什么编码格式呢?看了看网上的讲解,自己也试了试,总结一下。
1.如果是读自己程序里面写的文件是没有任何问题的。
File.WriteAllText("E:\\Codes\\new.txt","程序写的。。。"); string str = File.ReadAllText("E:\\Codes\\new.txt");
这样写是没有问题的,因为程序里面肯定默认的是同一种编码格式。
2.那么,默认的编码格式是什么呢?
string str = File.ReadAllText("E:\\Codes\\new.txt", System.Text.Encoding.GetEncoding("unicode")); string str1 = File.ReadAllText("E:\\Codes\\new.txt", System.Text.Encoding.GetEncoding("utf-7")); string str2 = File.ReadAllText("E:\\Codes\\new.txt", System.Text.Encoding.GetEncoding("utf-8")); string str3 = File.ReadAllText("E:\\Codes\\new.txt", System.Text.Encoding.GetEncoding("utf-16")); string str4 = File.ReadAllText("E:\\Codes\\new.txt", System.Text.Encoding.GetEncoding("GB2312"));
---------------------------
---------------------------
str:꣧辺蛥蒚胣芀胣憂慡,
str1:ç¨åºåçãããaaa,
str2:程序写的。。。aaa,
str3:꣧辺蛥蒚胣芀胣憂慡,
str4:绋嬪簭鍐欑殑銆傘€傘€俛aa
---------------------------
确定
---------------------------
比较一下几种编码方式,就很明显了,默认的是uft-8的编码格式,其实我一直以为utf-16会兼容uft-8的。。。
3.新建的文本文件,默认的编码格式是什么?手动新建一个文件readme.txt.
string str = File.ReadAllText("E:\\Codes\\readme.txt", System.Text.Encoding.GetEncoding("unicode")); string str1 = File.ReadAllText("E:\\Codes\\readme.txt", System.Text.Encoding.GetEncoding("utf-7")); string str2 = File.ReadAllText("E:\\Codes\\readme.txt", System.Text.Encoding.GetEncoding("utf-8")); string str3 = File.ReadAllText("E:\\Codes\\readme.txt", System.Text.Encoding.GetEncoding("utf-16")); string str4 = File.ReadAllText("E:\\Codes\\readme.txt", System.Text.Encoding.GetEncoding("GB2312"));
---------------------------
---------------------------
str:쟊믒퓊쒵쓎ﺼ慡,
str1:ÕâÊÇÒ»¸ö²âÊÔµÄÎļþaaa,
str2:����һ�����Ե��ļ�aaa,
str3:쟊믒퓊쒵쓎ﺼ慡,
str4:这是一个测试的文件aaa
---------------------------
确定
---------------------------
windows默认的新建文本文件的格式是GB2312,但是utf-7和utf-8还是可以读出英文的。
4.在实验的时候我还发现了一个有趣的现象,使用WriteAllText默认的编码格式创建的文件,直接读是只能用utf-8格式的,但是打开文件,手动修改文件之后,不选择另存为更改编码格式,直接保存,得到的结果是:
string str = File.ReadAllText("E:\\Codes\\new.txt", System.Text.Encoding.GetEncoding("unicode")); string str1 = File.ReadAllText("E:\\Codes\\new.txt", System.Text.Encoding.GetEncoding("utf-7")); string str2 = File.ReadAllText("E:\\Codes\\new.txt", System.Text.Encoding.GetEncoding("utf-8")); string str3 = File.ReadAllText("E:\\Codes\\new.txt", System.Text.Encoding.GetEncoding("utf-16")); string str4 = File.ReadAllText("E:\\Codes\\new.txt", System.Text.Encoding.GetEncoding("GB2312"));
---------------------------
---------------------------
str:程序写的啊。。。bbb,
str1:程序写的啊。。。bbb,
str2:程序写的啊。。。bbb,
str3:程序写的啊。。。bbb,
str4:程序写的啊。。。bbb
---------------------------
确定
---------------------------
全都可以准确的读出来了,真是一个诡异的事情,这时候,用的又是什么编码格式呢?另存为下的默认编码是文件本身的编码格式,这个文件还是utf-8的,编码格式没有变化。
同理,将手动新建的文本文件另存为utf-8编码格式的文件,程序中也是可以读出来的,看来,windows创建文件的方法,貌似跟WriteAllText还是有些区别的。
那个同学有兴趣的可以去看看更详细的教程,http://www.cnblogs.com/bitfan/archive/2010/11/25/1887590.html