2009-09-30 4 views
4

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

// 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 можно просмотреть акцентированные символы?

ответ

7

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

+2

Спасибо, Рон! Я использовал Encoding.UTF8.GetString (Encoding.UTF8.GetPreamble()), чтобы записать это в начале файла, затем обработал. –