Файл.Кодировка По Умолчанию AppendAllText

существующий код вызова File.AppendAllText(filename, text) перегрузки для сохранения текста в файл.

мне нужно иметь возможность указать кодировку без нарушения обратной совместимости. Если бы я использовал File.AppendAllText(filename, text, encoding) перегрузка какую кодировку мне нужно указать, чтобы гарантировать, что файлы были созданы точно так же?

2 ответов


перегрузка двух аргументов AppendAllText() заканчивается вызовом внутреннего метода File.InternalAppendAllText() использование кодировки UTF-8 без BOM:

[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));

быстрый взгляд на источники для файла.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;
  }
}

таким образом, похоже, вы хотите передать экземпляр UTF8Encoding без байтов заголовка UTF8.