当用流向文本文件中写入,或用流将文本文件内容读到textbox中是,我们会遇到汉字无法识别,出现乱码等情况,究其原因就是中文系统中文件的编码(encoding)和流的encoding方式不对应。
    文本编辑器(比如XP自带的记事本)在生成文本文件时,如果编码格式和系统默认的编码(中文系统下默认为GB2312)不一致时,会在txt文件开头部分添加特定的“编码字节序标识(Encoding Bit Order Madk,简写为BOM)”,类似PE格式的"MZ"文件头。这样它在读取时就可以根据这个BOM来确定该文本文件生成时所使用的Encoding。这个BOM我们用记事本等程序打开默认是看不到的,但是用stream按字节读取时是可以读到的。我的这个TxtFileEncoding类就是根据这个BOM“文件头”来确定txt文件生成时用到的编码的。
解决方式如下:
    a.对中文文本进行编码,并写入文本文件:
FileStream write = File.Create(save.FileName);  //生成文件流
Byte[] encodedBytes = new byte[rtxtContent.Text.Length * 2];
Encoding.GetEncoding(
"gb2312").GetBytes(rtxtContent.Text, 0, rtxtContent.Text.Length, encodedBytes, 0);

write.Write(encodedBytes, 
0, rtxtContent.Text.Length);//写入文件
write.Flush();//清空缓冲区
write.Dispose();//销毁流

    b.对文本文件进行解码,并显示到文本框
1StreamReader read = new StreamReader(open.FileName, Encoding.GetEncoding("gb2312")); //由文件路径生成流,汉字编码
2rtxtContent.Text= read.ReadToEnd();//读取文件
另注:ISO-8859-1为拉丁字符编码方式