IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Les caractères spéciaux de ma DataTable sont mal encodés lorsque que souhaite les exporter au format CSV


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    33
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 33
    Points : 18
    Points
    18
    Par défaut Les caractères spéciaux de ma DataTable sont mal encodés lorsque que souhaite les exporter au format CSV
    Bonjour,

    Je développe actuellement un "annuaire" basé sur AD.
    Lorsqu'un utilisateur effectue une recherche, on lui présente les
    résultats à l'aide d'une GridView remplie par une DataTable.
    On lui propose aussi un bouton qui va lui exporter la recherche au
    format .csv . La DataTable contient entre autres des noms et prénoms,
    donc des "ç", "é" .... Le problème c'est que quand j'ouvre le csv créé avec
    Excel, les lettres avec accents sont mal affichés

    Je n'ai pas trouvé comment faire pour modifier l'encodage !
    Existe t'il une fonction ou un variable à modifier pour ça ??

    Quelqu'un aurait il une solution à me proposer ??

    Merci d'avance.

    PS : Je suis débutant en .NET et C#

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 948
    Points : 1 111
    Points
    1 111
    Par défaut
    Bonjour,

    pourrais tu mettre le code de ton export? ca permettrait de voir ce qui peut générer ce probleme d'encodage.

  3. #3
    Membre à l'essai
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    33
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Voici le code de la fonction qui "construit" le fichier csv :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
        protected void createCSV(System.Data.DataTable dtTemp)
        {
            string contenu = "";
     
            foreach (DataColumn dc in dtTemp.Columns)
            {
                contenu += dc.ColumnName + "; ";
            }
     
            // On passe à la ligne et on saute une ligne
            contenu += Environment.NewLine;
            contenu += Environment.NewLine;
     
            foreach (DataRow dr in dtTemp.Rows)
            {
                foreach (DataColumn dc in dtTemp.Columns)
                {
                    contenu += dr[dc.ColumnName] + "; ";
                }
                // On passe à la ligne après avoir parcouru la ligne entière
                contenu += Environment.NewLine;
            }
     
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.ClearHeaders();
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=Resultat_Recherche.csv");
            HttpContext.Current.Response.ContentType = "text/csv";
            HttpContext.Current.Response.Write(contenu);
            HttpContext.Current.Response.End();
     
        }
    Voili Voulou

  4. #4
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Salut,

    As-tu lu cet article: http://philippe.developpez.com/artic...erexcelaspnet/ ?

    En général, les bases de données stockent les données au format UTF8. Il faut que tu le précise quand tu envois la réponse dans ta page web.

    A+

  5. #5
    Membre à l'essai
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    33
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Salut,

    Merci pour ta réponse Immobilis, mais c'est grâce à cet article que
    j'ai réaliser la fonction qui "construit" le csv et je ne vois pas où
    c'est expliqué pour l'encodage

  6. #6
    Membre à l'essai
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    33
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Bon ba j'ai trouvé la réponse tout seul

    Je mets la ligne de code qu'il me manquait au cas quelqu'un en aurait besoin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.ClearHeaders();
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=Resultat_Recherche.csv");
            HttpContext.Current.Response.ContentType = "text/csv";
    		HttpContext.Current.Response.ContentEncoding = Encoding.GetEncoding(1252);
            HttpContext.Current.Response.Write(contenu);
            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.Close();
    Le valeur 1252 correspond au codage windows europe occidental

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 08/07/2013, 12h45
  2. Réponses: 4
    Dernier message: 06/07/2012, 09h58
  3. Réponses: 3
    Dernier message: 21/08/2009, 15h33
  4. les caractères spéciaux dans l'url, c'est mal !
    Par _gargamel_ dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 10/05/2007, 16h03
  5. Traiter les caractères spéciaux
    Par ricola dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2003, 09h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo