c#中文件读写的编码格式

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

原文地址:https://www.cnblogs.com/jinshizuofei/p/3405385.html