C# 讀寫文本文件亂碼解決方案
在使用C#對文本文件讀取的時(shí)候,如果其中包含了中文,經(jīng)常會出現(xiàn)亂碼。一般解決是在StreamReader加一個(gè)編碼,我使用的是Encoding.UTF8,一般情況下使用這個(gè)參數(shù)就可以。但是,在這次我使用UTF8卻無效。而且使用,unicode和UTF32都會使用StreamReader的EndOfStream在讀取一行之后,就會變成true。我想原因可能是使用這種編碼沒有正確讀取出換行符,使讀取一次之后就到達(dá)了文件末尾。
直到后來,看到一片資料,使用Encoding.GetEncoding("gb2312"),就解決了亂碼問題??磥硇枰俣纫幌耮b2312和UTF8的區(qū)別。
附:原文:
在對文本文件進(jìn)行讀取的時(shí)候,如果其中包含了中文,可能就會有亂碼的出現(xiàn),解決方法很簡單。只需要在讀取出來的時(shí)候StreamReader加一個(gè)編碼就可以了。代碼如下:
using System.IO;
StreamReader sr = new StreamReader(fileName,Encoding.GetEncoding("gb2312"));//fileName為文件的絕對路徑
由于C#操作文件的內(nèi)容網(wǎng)上有很多,我就不詳細(xì)說明了,下面給出兩個(gè)函數(shù),分別用來讀取和寫入文本文件,記得引用System.IO;
/// <summary>
/// 功能:
/// 在指定的文件filename處生成該文件,并且以內(nèi)容content來填充。
/// </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)建文本文件也是沒有問題的。
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;
}
}
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報(bào)。