如何在 C# 中使用 UTF-8 以外的代码页写出文本文件?

Posted

技术标签:

【中文标题】如何在 C# 中使用 UTF-8 以外的代码页写出文本文件?【英文标题】:How do I write out a text file in C# with a code page other than UTF-8? 【发布时间】:2010-09-27 06:22:49 【问题描述】:

我想写出一个文本文件。

而不是默认的 UTF-8,我想将其编码为 ISO-8859-1,即代码页 28591。我不知道该怎么做...

我正在用以下非常简单的代码写出我的文件:

using (StreamWriter sw = File.CreateText(myfilename))

    sw.WriteLine("my text...");
    sw.Close();

【问题讨论】:

【参考方案1】:

你可以有这样的东西

 switch (EncodingFormat.Trim().ToLower())
    
        case "utf-8":
            File.WriteAllBytes(fileName, ASCIIEncoding.Convert(ASCIIEncoding.ASCII, new UTF8Encoding(false), convertToCSV(result, fileName)));
            break;
        case "utf-8+bom":
            File.WriteAllBytes(fileName, ASCIIEncoding.Convert(ASCIIEncoding.ASCII, new UTF8Encoding(true), convertToCSV(result, fileName)));
            break;
        case "ISO-8859-1":
            File.WriteAllBytes(fileName, ASCIIEncoding.Convert(ASCIIEncoding.ASCII, Encoding.GetEncoding("iso-8859-1"), convertToCSV(result, fileName)));
            break;
        case ..............
    

【讨论】:

【参考方案2】:

用 FileStream 包装你的 StreamWriter,这样:

string fileName = "test.txt";
string textToAdd = "Example text in file";
Encoding encoding = Encoding.GetEncoding("ISO-8859-1"); //Or any other Encoding

using (FileStream fs = new FileStream(fileName, FileMode.CreateNew))

    using (StreamWriter writer = new StreamWriter(fs, encoding))
    
        writer.Write(textToAdd);
    

Look at MSDN

【讨论】:

【参考方案3】:

简单!

System.IO.File.WriteAllText(path, text, Encoding.GetEncoding(28591));

【讨论】:

可以更简单:File.WriteAllLines(path, lines, Encoding.UTF8); @LevZ:很好的补充——我怀疑 9 年前我写答案时它不可用 :)【参考方案4】:
using System.IO;
using System.Text;

using (StreamWriter sw = new StreamWriter(File.Open(myfilename, FileMode.Create), Encoding.WhateverYouWant))
    
    sw.WriteLine("my text...");     

获取编码的另一种方法:

using System.IO;
using System.Text;

using (var sw  = new StreamWriter(File.Open(@"c:\myfile.txt", FileMode.CreateNew), Encoding.GetEncoding("iso-8859-1"))) 
    sw.WriteLine("my text...");             

查看 StreamWriter 构造函数的文档。

【讨论】:

“我想要什么”可以是代码页号还是...? MS Visual C# 中函数的自动完成功能并没有给我一个“iso-8859-1”选项......只有 UTF8、UTF16 等...... Encoding.GetEncoding("iso-8859-1") 刚才有什么问题:using (StreamWriter sw = new StreamWriter(File.Create(myfilename), Encoding.WhateverYouWant)) 【参考方案5】:

更改流写入器的编码。这是一个属性。

http://msdn.microsoft.com/en-us/library/system.io.streamwriter.encoding.aspx

所以:

sw.Encoding = Encoding.GetEncoding(28591);

写入流之前。

【讨论】:

以上是关于如何在 C# 中使用 UTF-8 以外的代码页写出文本文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何写出优雅的代码?

如何一行jquery代码写出tab标签页(链式操作)

Windows 中的 UTF-8

用datalist如何实现分页的代码(C#)

如何在asp.net c#的web配置文件中设置起始页

代码质量第 4 层