File.AppendAllText默认编码

时间:2013-06-17 09:50:47

标签: c# encoding

现有代码调用File.AppendAllText(filename, text)重载以将文本保存到文件中。

我需要能够在不破坏向后兼容性的情况下指定编码。如果我要使用File.AppendAllText(filename, text, encoding)重载,我需要指定哪种编码以确保文件以完全相同的方式创建?

2 个答案:

答案 0 :(得分:10)

AppendAllText()的两个参数重载最终使用不带BOM的UTF-8编码调用内部方法File.InternalAppendAllText()

[SecuritySafeCritical]
public static void AppendAllText(string path, string contents)
{
    if (path == null) {
        throw new ArgumentNullException("path");
    }
    if (path.Length == 0) {
        throw new ArgumentException(
            Environment.GetResourceString("Argument_EmptyPath"));
    }
    File.InternalAppendAllText(path, contents, StreamWriter.UTF8NoBOM);
}

因此,你可以写:

using System.IO;
using System.Text;

File.AppendAllText(filename, text, new UTF8Encoding(false, true));

答案 1 :(得分:4)

快速浏览File.AppenAllText的源代码,可以看到以下实现:

public static void AppendAllText(string path, string contents)
{
  // Removed some checks
  File.InternalAppendAllText(path, contents, StreamWriter.UTF8NoBOM);
}

internal static Encoding UTF8NoBOM
{
  get
  {
    if (StreamWriter._UTF8NoBOM == null)
    {
      StreamWriter._UTF8NoBOM = new UTF8Encoding(false, true);
    }
    return StreamWriter._UTF8NoBOM;
  }
}

所以看起来你想传递一个没有UTF8头字节的UTF8Encoding实例。