Файл.Кодировка По Умолчанию 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.