计算机在最初只撑持ASCII编码,但是后来为了撑持其他语言中的字符(好比汉字)以及一些特殊字符(好比€),就引入了Unicode字符集。基于Unicode字符集的编码方法有很多,好比UTF-7、UTF-8、Unicode以及UTF-32。
在Windows操纵系统中,一个文本文件的前几个字节是用来指定该文件的编码方法的
如果你使用NotePad或WordPad来打开一个文本文件,你并不用担忧该文件的编码方法,因为这些应用措施会先读取文件的前几个字节来确定该文件的编码方法,然后用正确的编码将文本中的每个字符显示出来。下面的图
中,可以看到当用NotePad记事本生存一个文档时,可以选择的编码(Encoding)方法有哪些
用.Net读取文本文件或写入文本文件,你都不需要担忧编码方法,.Net已经将这些封装好了。在读取一个文本文件的时候,如果你已经知道文本使用的是什么编码方法,你可以指定使用哪种编码方法读取文本,否则如果不指定编码方法,.Net会读取文本的前几个字节来确定使用哪种编码方法读取文件内容的。在写入文本文件的时候,你也可以指定你想使用的编码方法。如果你没有指定编码,.Net会按照写入的文本是否含有特殊字符来决定编码方法。如果没有特殊字符,就给与ASCII编码,如果有特殊字符,就给与UTF-8编码
读取txt文件如果你要读取的文件内容不是很多,可以使用 File.ReadAllText(filePath) 或指定编码方法 File.ReadAllText(FilePath, Encoding)的要领。它们都一次性将文本内容全部读完,并返回一个包罗全部文本内容的字符串
string str1 = File.ReadAllText(@"c:\temp\a.txt");
//也可以指定编码方法
string str2 = File.ReadAllText(@"c:\temp\a.txt", Encoding.ASCII);
string str1 = File.ReadAllText(@"c:\temp\a.txt");
//也可以指定编码方法
string str2 = File.ReadAllText(@"c:\temp\a.txt", Encoding.ASCII);
也可以使用要领File.ReadAllLines,该要领一次性读取文本内容的所有行,返回一个字符串数组,数组元素是每一行的内容
string[] strs1 = File.ReadAllLines(@"c:\temp\a.txt");
// 也可以指定编码方法
string[] strs2 = File.ReadAllLines(@"c:\temp\a.txt", Encoding.ASCII);
.Net为我们封装了StreamReader类,它旨在以一种特定的编码从字节流中读取字符。StreamReader类的要领不是静态要领,所以要使用该类读取文件首先要实例化该类,在实例化时,要供给读取文件的路径。实例化
StreamReader类有很多种方法。下面我罗列出几种:
StreamReader sR1 = new StreamReader(@"c:\temp\a.txt");
// 同样也可以指定编码方法
StreamReader sR2 = new StreamReader(@"c:\temp\a.txt", Encoding.UTF8);
FileStream fS = new FileStream(@"C:\temp\a.txt", FileMode.Open, FileAccess.Read, FileShare.None);
StreamReader sR3 = new StreamReader(fS);
StreamReader sR4 = new StreamReader(fS, Encoding.UTF8);
FileInfo myFile = new FileInfo(@"C:\temp\a.txt");
// OpenText 创建一个UTF-8 编码的StreamReader东西
StreamReader sR5 = myFile.OpenText();
// OpenText 创建一个UTF-8 编码的StreamReader东西
StreamReader sR6 = File.OpenText(@"C:\temp\a.txt");
初始化完成之后,,你可以每次读一行,也可以每次读一个字符 ,还可以每次读几个字符,甚至也可以一次将所有内容全部读完
// 读一行
string nextLine = sR.ReadLine();
// 读一个字符
int nextChar = sR.Read();
// 读100个字符
int n = 100;
char[] charArray = new char[n];
int nCharsRead = sR.Read(charArray, 0, n);
// 全部读完
string restOfStream = sR.ReadToEnd();
使用完StreamReader之后,不要忘记*它: sR.Close();
假如我们需要一行一行的读,将整个文本文件读完,下面看一个完整的例子:
StreamReader sR = File.OpenText(@"C:\temp\a.txt");
string nextLine;
while ((nextLine = sR.ReadLine()) != null)
{
Console.WriteLine(nextLine);
}
sR.Close();
写入txt文件
写文件和读文件一样,如果你要写入的内容不是很多,可以使用File.WriteAllText要领来一次将内容全部写如文件。如果你要将一个字符串的内容写入文件,可以用File.WriteAllText(FilePath) 或指定编码方法
File.WriteAllText(FilePath, Encoding)要领