2009-09-30 9 views
4

J'utilise une technique de another Stack Overflow question pour écrire un fichier CSV à la sortie Response pour un utilisateur à ouvrir/enregistrer. Le fichier semble bon dans le Bloc-notes, mais quand je l'ouvre dans Excel les caractères accentués sont garbage. J'ai supposé que c'était quelque chose à voir avec l'encodage de caractères, donc j'ai essayé de le régler manuellement sur UTF-8 (la valeur par défaut pour StreamWriter). Voici le code:Pourquoi la sortie de ma réponse StreamWriter produit-elle des accents de vidage dans Excel mais semble correcte dans le Bloc-notes?

// 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(); 

Toutes les idées ce que je devrais faire pour coder correctement le fichier si Excel peut afficher les caractères accentués?

Répondre

7

Vous devrez peut-être écrire un indicateur UTF-8 appelé Byte-order Mark au début de la sortie pour informer Excel de l'UTF-8. Excel stupide.

+2

Merci Ron! J'ai utilisé Encoding.UTF8.GetString (Encoding.UTF8.GetPreamble()) pour écrire cela au début du fichier, a travaillé un régal alors. –