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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM