现有代码调用File.AppendAllText(filename, text)
重载以将文本保存到文件中。
我需要能够在不破坏向后兼容性的情况下指定编码。如果我要使用File.AppendAllText(filename, text, encoding)
重载,我需要指定哪种编码以确保文件以完全相同的方式创建?
答案 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实例。