2013-06-17 4 views
7

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

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

ответ

9

Два аргумента перегрузки 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)); 
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; 
    } 
} 

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

Смежные вопросы