• 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;
                }
            }

  • 相关阅读:
    1、 小白带你入坑xamarin系列之环境搭建和准备
    Xamarin.Forms3.0 在Android中TabbedPage的注意事项
    .NetCore + NSwag生成可交互API文档
    Xamarin.forms3.0中Naxam.BottomTabbedPage v0.2.0.2遇到的问题
    Xamarin.Forms ContentPage生命周期的困惑
    Xamarin.Forms 手势密码实现
    [编程珠玑]位向量与排序
    MVVM Light Messenger的使用
    WPF 利用Process.Start()方法启动指定路径下的exe文件并传递参数接收参数
    Xamarin.Forms中实现CheckBox控件
  • 原文地址:https://www.cnblogs.com/wwwzzg168/p/3569143.html
Copyright © 2020-2023  润新知