Accents et téléchargement de fichiers

ptitkosmos Messages postés 11 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 16 juin 2012 - 24 févr. 2009 à 15:11
cs_fonio Messages postés 56 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 15 février 2013 - 15 juil. 2010 à 16:46
Bonjour,

j'ai un souci avec les encodages et accentuations : pas dans les fichiers en eux mêmes mais dans le nom. Voici mon cas :

Je génère deux types de fichiers
- soit un .xls seul (par ex : té_12_02_2009.xls)
- soit un .zip avec plusieurs .xls (par ex : tous_les tés.zip contenant té_12_02_2009.xls, té_13_02_2009.xls)
Dans les deux cas, tout est généré à la volée.

Lorsque la boîte de dialogue arrive :
- le .xls seul devient tÃc_12_02_2009.xls
- le .zip devient tous_les tÃcs.zip  contenant té_12_02_2009.xls, té_13_02_2009.xls

En fait seuls les noms des fichiers à enregistrer sont mal encodés.

Pour ce qui est du code voici le bout concerné :
ZipOutputStream

zipOutputStream =
null;

MemoryStream memoryStream =
new
MemoryStream();

StringBuilder stringBuilder =
new
StringBuilder();

//création des fichiers
foreach (
DataView dataView
in dataViews)
{  
   stringBuilder =
new
StringBuilder();

   [...] //du code type stringBuilder.Append('');

   if (dataViews.Length > 1)
   {

      //ajout des fichiers grâce à #ZipLib
      Crc32 crc =
new
Crc32();

      ZipEntry entry =
new ICSharpCode.SharpZipLib.Zip.
ZipEntry(
ZipEntry.CleanName(NomFichierReglemente)); 
      entry.DateTime =
DateTime.Now;

      
byte[] buffer = System.Text.
Encoding.GetEncoding(
"iso-8859-1").GetBytes(stringBuilder.ToString());
      entry.Size = buffer.Length;
      crc.Reset();
      crc.Update(buffer);
      entry.Crc = crc.Value;
      zipOutputStream.PutNextEntry(entry);
      zipOutputStream.Write(buffer, 0, buffer.Length);
   }
}
 

// envoi dans la réponse
if
(dataViews.Length == 1)
{

   // un seul fichier .xls
   page.Response.ContentType = "Application/x-msexcel";
   page.Response.AddHeader("content-disposition", "attachment; filename="" + NomFichier + """);
   page.Response.ContentEncoding = Encoding.GetEncoding("iso-8859-1");
   page.Response.Write(stringBuilder.ToString());
}

elseif (dataViews.Length > 1)
{

   //le zip de tous les .xls
   zipOutputStream.Finish();
   zipOutputStream.Flush();
   page.Response.Clear();
   page.Response.ContentType = "application/x-zip-compressed";
   page.Response.ContentEncoding = Encoding.GetEncoding("iso-8859-1");
   page.Response.AddHeader("content-disposition", "attachment; filename="" + NomFichier + """);
   memoryStream.WriteTo(page.Response.OutputStream);
   zipOutputStream.Close();
}
page.Response.End();

Merci d'avance pour vos réponses...

3 réponses

cs_Promesses Messages postés 17 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 7 décembre 2010
10 juil. 2009 à 13:55
J'ai le même souci....
0
cs_fonio Messages postés 56 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 15 février 2013 1
15 juil. 2010 à 16:28
NomFichier = Server.UrlPathEncode(NomFichier) 


fonctionnement ok sur IE, pour un .doc par exemple.
0
cs_fonio Messages postés 56 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 15 février 2013 1
15 juil. 2010 à 16:46
C'est donc ok au niveau du texte de la boîte de dialogue du téléchargement.

MAIS ko pour le nom du fichier lors de l'ouverture ou de l'enregistrement :
Demande%20de%20pi%c3%a8ces%20compl%c3%a9mentaires.doc
0
Rejoignez-nous