none
关于System.IO.StreamWriter 在指定编码下写入中文,出现乱码的一个小问题 RRS feed

  • 问题

  • 大家好,再次来提问了,再过20分钟就是五四青年节了,我也是一个年轻的程序员,在这里,祝广大的青年程序员节目快乐!

    呵呵,我得说说我的问题了:

    我的问题场景是很简单的,

    我需要创建一个文本文件,并向其实写入某些信息,然后发给客户。

    我知道可以简单地使用。System.IO.File.CreateText,来创建一个文本文件,然后写入文本,就可以了。但是,用这个方法创建的文本文件是以:UTF-8 编码的。

    问题就出在这里。客户提出要求,要求文件以 ASCII编码。否则,他们的解释程序无法读取文件。

    为解决这个问题,我已找到了一个解决方法。如下面的代码所示:

    using System;
    
    using System.Collections.Generic;
    
    using System.Linq;
    
    using System.Text;
    
    using System.IO;
    
    
    
    namespace GiftGis
    
    {
    
     class Write_ANSI_TextFile_Class_dxtlsd
    
     {
    
      [STAThread()]
    
      static void Main(string[] args)
    
      {
    
       var path = Path.Combine(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop),"示例文件.Txt");
    
       // 以下一句显式指定了编码,写入的将会是乱码。
    
       // using (System.IO.StreamWriter sw = new StreamWriter(File.Open(path, FileMode.Create), Encoding.ASCII))
    
       // 但使用 Encoding.Default 就不会发生错误,虽然在我的计算机上 Encoding.Default 实际上是 ASCII 编码 
    
       // 这是什么原因呢?如何在指写 Encoding.ASCII 的情况下写入中文也不会出现乱码呢?
    
       using (System.IO.StreamWriter sw = 
    
        new StreamWriter(File.Open(path, FileMode.Create),
    
        System.Text.Encoding.Default))
    
       {
    
        sw.Write("中华人民共和国");
    
       };
    
       System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
    
       myProcess.StartInfo.FileName = path;
    
    
    
       Console.WriteLine("接任意键打开文件");
    
       var s = Console.In.ReadLine();
    
       myProcess.Start();
    
    
    
      }
    
     }
    
    }
    
    
    
    
    

    那么我的问题是什么呢?我在上面的代码中,使用了 Encoding.Default来指定文件的编码,但是。并不是每台计算机的Encoding.Default 都是ANSI的。

    我如何在指定 Encoding.ASCII 的情况下,依然可以写入中文而不出现乱码呢?

    多谢你的阅读,期待你的答案!


    陈景标
    2011年5月3日 15:51

答案

全部回复