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
