C# 读写文本文件乱码解决方案

在使用C#对文本文件读取的时候,如果其中包含了中文,经常会出现乱码。一般解决是在StreamReader加一个编码,我使用的是Encoding.UTF8,一般情况下使用这个参数就可以。但是,在这次我使用UTF8却无效。而且使用,unicode和UTF32都会使用StreamReader的EndOfStream在读取一行之后,就会变成true。我想原因可能是使用这种编码没有正确读取出换行符,使读取一次之后就到达了文件末尾。

直到后来,看到一片资料,使用Encoding.GetEncoding”gb2312″),就解决了乱码问题。看来需要百度一下gb2312和UTF8的区别。

附:原文:

在对文本文件进行读取的时候,如果其中包含了中文,可能就会有乱码的出现,解决方法很简单。只需要在读取出来的时候StreamReader加一个编码就可以了。代码如下:
using System.IO;
StreamReader sr = new StreamReaderfileName,Encoding.GetEncoding”gb2312″));//fileName为文件的绝对路径

由于C#操作文件的内容网上有很多,我就不详细说明了,下面给出两个函数,分别用来读取和写入文本文件,记得引用System.IO;
/// <summary>
        /// 功能:
        /// 在指定的文件filename处生成该文件,并且以内容content来填充。
        /// </summary>
        /// <param name=”filename”>文件名</param>
        /// <param name=”content”>文件内容</param>
        public static void CreateFilestring filename,string content)
        {
            try
            {
//这个构造函数的具体含义:在指定的文件fileName处,第二个参数表示是否将内容追加到文件。如果文件存在,并且第二个参数append为false,那么将改写文件,如果append为true,则在末尾加入内容,如果文件不存在,则创建该文件,并且填充内容。 所以就算文件不存在,我们这样创建文本文件也是没有问题的。       
StreamWriter sw = new StreamWriterfilename,false,Encoding.GetEncoding”gb2312″));
                sw.Writecontent);
                sw.Flush);
                sw.Close);
            }
            catchIOException ioe)
            {
                throw ioe;
            }
        }

/// <summary>
        /// 功能:
        /// 在文件的最前面加入内容content
        /// </summary>
        /// <param name=”filename”>文件名</param>
        /// <param name=”content”>插入的内容</param>
        public static void InsertFilestring filename,string content)
        {
            try
            {
                StreamReader sr = new StreamReaderfilename,Encoding.GetEncoding”gb2312″));
                content += sr.ReadToEnd);
                sr.Close);
                CreateFilefilename,content);

            }
            catchIOException ioe)
            {
                throw ioe;
            }
        }
        /// <summary>
        /// 功能:
        /// 在文件末尾增加指定内容content
        /// </summary>
        /// <param name=”filename”>文件名</param>
        /// <param name=”content”>新增内容</param>
        public static void AppendFilestring filename,string content)
        {
            try
            {
                string filecontent = “”;
                StreamReader sr = new StreamReaderfilename,Encoding.GetEncoding”gb2312″));
                filecontent += sr.ReadToEnd) + content;//如果要保持文件格式则必须这么读,不能一行一行读!
                sr.Close);
                CreateFilefilename,filecontent);

            }
            catchIOException ioe)
            {
                throw ioe;
            }
        }

Published by

风君子

独自遨游何稽首 揭天掀地慰生平