C# 讀寫文本文件亂碼解決方案
在使用C#對(duì)文本文件讀取的時(shí)候,如果其中包含了中文,經(jīng)常會(huì)出現(xiàn)亂碼。一般解決是在StreamReader加一個(gè)編碼,我使用的是Encoding.UTF8,一般情況下使用這個(gè)參數(shù)就可以。但是,在這次我使用UTF8卻無(wú)效。而且使用,unicode和UTF32都會(huì)使用StreamReader的EndOfStream在讀取一行之后,就會(huì)變成true。我想原因可能是使用這種編碼沒(méi)有正確讀取出換行符,使讀取一次之后就到達(dá)了文件末尾。 直到后來(lái),看到一片資料,使用Encoding.GetEncoding("gb2312"),就解決了亂碼問(wèn)題??磥?lái)需要百度一下gb2312和UTF8的區(qū)別。
附:原文:
在對(duì)文本文件進(jìn)行讀取的時(shí)候,如果其中包含了中文,可能就會(huì)有亂碼的出現(xiàn),解決方法很簡(jiǎn)單。只需要在讀取出來(lái)的時(shí)候StreamReader加一個(gè)編碼就可以了。代碼如下:
using System.IO; StreamReader sr = new StreamReader(fileName,Encoding.GetEncoding("gb2312"));//fileName為文件的絕對(duì)路徑 由于C#操作文件的內(nèi)容網(wǎng)上有很多,我就不詳細(xì)說(shuō)明了,下面給出兩個(gè)函數(shù),分別用來(lái)讀取和寫入文本文件,記得引用System.IO;
/// <summary> /// 功能: /// 在指定的文件filename處生成該文件,并且以內(nèi)容content來(lái)填充。 /// </summary> /// <param name="filename">文件名</param> /// <param name="content">文件內(nèi)容</param> public static void CreateFile(string filename,string content) { try { //這個(gè)構(gòu)造函數(shù)的具體含義:在指定的文件fileName處,第二個(gè)參數(shù)表示是否將內(nèi)容追加到文件。如果文件存在,并且第二個(gè)參數(shù)append為false,那么將改寫文件,如果append為true,則在末尾加入內(nèi)容,如果文件不存在,則創(chuàng)建該文件,并且填充內(nèi)容。 所以就算文件不存在,我們這樣創(chuàng)建文本文件也是沒(méi)有問(wèn)題的。 StreamWriter sw = new StreamWriter(filename,false,Encoding.GetEncoding("gb2312")); sw.Write(content); sw.Flush(); sw.Close(); } catch(IOException ioe) { throw ioe; } } /// <summary>
/// 功能: /// 在文件的最前面加入內(nèi)容content /// </summary> /// <param name="filename">文件名</param> /// <param name="content">插入的內(nèi)容</param> public static void InsertFile(string filename,string content) { try { StreamReader sr = new StreamReader(filename,Encoding.GetEncoding("gb2312")); content += sr.ReadToEnd(); sr.Close(); CreateFile(filename,content); }
catch(IOException ioe) { throw ioe; } } /// <summary> /// 功能: /// 在文件末尾增加指定內(nèi)容content /// </summary> /// <param name="filename">文件名</param> /// <param name="content">新增內(nèi)容</param> public static void AppendFile(string filename,string content) { try { string filecontent = ""; StreamReader sr = new StreamReader(filename,Encoding.GetEncoding("gb2312")); filecontent += sr.ReadToEnd() + content;//如果要保持文件格式則必須這么讀,不能一行一行讀! sr.Close(); CreateFile(filename,filecontent); }
catch(IOException ioe) { throw ioe; } } 摘自紅色黑客聯(lián)盟(www.) 原文:http://www./kf/201007/52582.html
|
|
來(lái)自: huanlana > 《FileOperation》