CSV : problème d'encodage
Bonjour,
je cherche à générer un fichier CSV. J'utilise ce code pour la construction :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| private void BuildCsv(ref MemoryStream memStream)
{
StreamWriter sw = new StreamWriter(memStream,System.Text.Encoding.UTF8);
sw.WriteLine("Un texte de résumé");
// En-tête
sw.WriteLine(String.Format("\"{0}\" ; \"{1}\" ; \"{2}\" ; \"{3}\" ; \"{4}\" ; \"{5}\" ; \"{6}\"",
col1,
col2,
col3,
col4,
col5,
col6,
col7));
// Donnees
foreach (IStnDes res in maliste)
{
sw.WriteLine(String.Format("\"{0}\" ; \"{1}\" ; \"{2}\" ; \"{3}\" ; \"{4}\" ; \"{5}\" ; \"{6}\"",
res.ch1,
res.ch2,
res.ch3,
res.ch4,
res.ch5,
res.ch6,
res.ch7));
}
// Nettoyage du streamwritter
sw.Flush();
sw.Close();
} |
L'envoi à l'utilisateur se fait ainsi :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| byte[] byteArray = memStream.ToArray();
//Nettoyage du MemoryStream
memStream.Flush();
memStream.Close();
// Nettoyage du contenu de sortie
Context.Response.Clear();
// Header HTTP qui donne le fichier par défaut à aller chercher
Context.Response.AddHeader("Content-Disposition", "attachment; filename=" + strCsvFileName + ".csv");
// Header HTTP qui contient la taille de fichier
Context.Response.AddHeader("Content-Length", byteArray.Length.ToString());
// MIME type
Context.Response.ContentType = "application/octet-stream";
// Ecriture des données binaire sur le flux de sortie
Context.Response.BinaryWrite(byteArray); |
Avec ceci, lorsque je suis en UTF8, les accents passent bien mais Excel ne "voit" pas les colonnes (tout est importé dans la même colonne).
Si j'encode en ASCII, les accents sont affichés comme des points d'interrogation, mais les colonnes sont bien "détectées".
Je ne comprends pas bien pourquoi... donc si vous aviez une piste ! ;)
Merci d'avance !
Alban