Почему мой вывод StreamWriter Response создает мусорные акценты в Excel, но выглядит нормально в Блокноте?

Я использую метод из другого переполнения стека. вопрос, чтобы записать CSV-файл в выходной файл Response, чтобы пользователь мог его открыть/сохранить. Файл выглядит хорошо в Блокноте, но когда я открываю его в Excel, символы с диакритическими знаками становятся мусором. Я предположил, что это как-то связано с кодировкой символов, поэтому попытался вручную установить ее в UTF-8 (по умолчанию для StreamWriter). Вот код:

// This fills a list to enumerate - each record is one CSV line
List<FullRegistrationInfo> fullUsers = GetFullUserRegistrations();

context.Response.Clear();
context.Response.AddHeader("content-disposition",
                           "attachment; filename=registros.csv");
context.Response.ContentType = "text/csv";
context.Response.Charset = "utf-8";

using (StreamWriter writer = new StreamWriter(context.Response.OutputStream))
{
    for (int i = 0; i < fullUsers.Count(); i++)
    {
        // Get the record to process
        FullRegistrationInfo record = fullUsers[i];

        // If it's the first record then write header
        if (i == 0)
            writer.WriteLine(Encoding.UTF8.GetString(
                Encoding.UTF8.GetPreamble()) + 
                "User, First Name, Surname");

        writer.WriteLine(record.User + "," +
                         record.FirstName + "," +
                         record.Surname);
    }
}

context.Response.End();

Любые идеи относительно того, что еще мне нужно сделать, чтобы правильно закодировать файл, чтобы Excel мог просматривать символы с акцентом?


person Neal Hudson    schedule 30.09.2009    source источник


Ответы (1)


Возможно, вам придется написать индикатор UTF-8 с именем Знак порядка байтов в начало вывод, чтобы уведомить Excel о UTF-8ness. Глупый Эксель.

person ron    schedule 30.09.2009
comment
Спасибо Рон! Я использовал Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble()), чтобы записать это в начале файла, и тогда это сработало. - person Neal Hudson; 30.09.2009