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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值