8

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

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

4

2 回答 2

10

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

[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));
于 2013-06-17T09:57:15.210 回答
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 实例。

于 2013-06-17T10:01:55.280 回答