zoukankan      html  css  js  c++  java
  • C# 读写文本文件乱码解决方案

    在使用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;//如果要保持文件格式则必须这么读,不能一行一行读!
                    sr.Close();
                    CreateFile(filename,filecontent);

                }
                catch(IOException ioe)
                {
                    throw ioe;
                }
            }

  • 相关阅读:
    帝国 标签模板 使用程序代码 去除html标记 并 截取字符串
    iis6 伪静态 iis配置方法 【图解】
    您来自的链接不存在 帝国CMS
    帝国cms Warning: Cannot modify header information headers already sent by...错误【解决方法】
    .fr域名注册 51元注册.fr域名
    帝国网站管理系统 恢复栏目目录 建立目录不成功!请检查目录权限 Godaddy Windows 主机
    星外虚拟主机管理平台 开通数据库 出现Microsoft OLE DB Provider for SQL Server 错误 '8004' 从字符串向 datetime 转换失败
    ASP.NET 自定义控件学习研究
    CSS层叠样式表之CSS解析机制的优先级
    ASP.NET程序员工作面试网络收藏夹
  • 原文地址:https://www.cnblogs.com/wwwzzg168/p/3569143.html
Copyright © 2011-2022 走看看