在使用C#對文本文件讀取的時候,如果其中包含了中文,經常會出現亂碼。一般解決是在StreamReader加一個編碼,我使用的是Encoding.UTF8,一般情況下使用這個參數就可以。但是,在這次我使用UTF8卻無效。而且使用,unicode和UTF32都會使用StreamReader的EndOfStream在讀取一行之後,就會變成true。我想原因可能是使用這種編碼沒有正確讀取出換行符,使讀取一次之後就到達了文件末尾。
直到後來,看到一片資料,使用Encoding.GetEncoding("gb2312"),就解決了亂碼問題。看來需要百度一下gb2312和UTF8的區別。
附:原文:
在對文本文件進行讀取的時候,如果其中包含了中文,可能就會有亂碼的出現,解決方法很簡單。只需要在讀取出來的時候StreamReader加一個編碼就可以了。代碼如下:
using System.IO;
StreamReader sr = new StreamReader(fileName,Encoding.GetEncoding("gb2312"));//fileName為文件的絕對路徑
由於C#操作文件的內容網上有很多,我就不詳細說明了,下面給出兩個函數,分別用來讀取和寫入文本文件,記得引用System.IO;
/// <summary>
/// 功能:
/// 在指定的文件filename處生成該文件,並且以內容content來填充。
/// </summary>
/// <param name="filename">文件名</param>
/// <param name="content">文件內容</param>
public static void CreateFile(string filename,string content)
{
try
{
//這個構造函數的具體含義:在指定的文件fileName處,第二個參數表示是否將內容追加到文件。如果文件存在,並且第二個參數append為false,那麼將改寫文件,如果append為true,則在末尾加入內容,如果文件不存在,則創建該文件,並且填充內容。 所以就算文件不存在,我們這樣創建文本文件也是沒有問題的。
StreamWriter sw = new StreamWriter(filename,false,Encoding.GetEncoding("gb2312"));
sw.Write(content);
sw.Flush();
sw.Close();
}
catch(IOException ioe)
{
throw ioe;
}
}
/// <summary>
/// 功能:
/// 在文件的最前面加入內容content
/// </summary>
/// <param name="filename">文件名</param>
/// <param name="content">插入的內容</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>
/// 功能:
/// 在文件末尾增加指定內容content
/// </summary>
/// <param name="filename">文件名</param>
/// <param name="content">新增內容</param>
public static void AppendFile(string filename,string content)
{
try
{
string filecontent = "";
StreamReader sr = new StreamReader(filename,Encoding.GetEncoding("gb2312"));
filecontent += sr.ReadToEnd() + content;//如