none
Problème d'Encoding RRS feed

  • Question

  • Je veux exporter les donnée d'une grille dans un fichier Excel , ces données sont en français.

    J'ai fait cela :

     

    public static void ExportGridView( DataGrid dataGrid, string fileName)
            {
                HttpResponse m_Response = HttpContext.Current.Response;
                m_Response.Clear();
                m_Response.AddHeader("content-disposition",
                    string.Format("attachment;filename={0}", fileName));
                m_Response.Charset = "";           
                m_Response.ContentType = "application/octet-stream"; //"application/vnd.xls";
                m_Response.ContentEncoding = Encoding.UTF32;
                StringWriter stringWrite = new StringWriter();
                HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
                dataGrid.RenderControl(htmlWrite);
                m_Response.Write(stringWrite.ToString());
                m_Response.End();

    }

     

    Par contre la sortie n'est pas en bon format.

    Ex )

     Engagé => engagé

     Société => Société

    mardi 31 août 2010 14:39

Réponses

  • Bonjour,

    J'essaierai la page de code Windows 1252. A priori l'encodage est dans le "header" http donc Excel ne verra de toute façon pas cette info. En l'absence de toute autre info, il va donc je pense utiliser la page de code de l'OS.

    Sinon peut-être essayer de préciser le charset en mettant l'encodage dans une balise meta (http://www.w3.org/TR/html4/charset.html#h-5.2.2).

    Il serait peut-être également souhaitable d'ajouter les balises html et body qui manquent sans doute dans le balisage actuel même si ce n'est pas strictement nécessaire.

    Plus généralement mon approche pour ce genre de problème est de faire le contraire, c'est à dire de créer un classeur Excel, de l'exporter en HTML et de voir ce qu'Excel préfère indiquer dans le fichier...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 31 août 2010 16:30
    Modérateur
  • Je veux exporter les donnée d'une grille dans un fichier Excel , ces données sont en français.

    J'ai fait cela :

     

    public static void ExportGridView( DataGrid dataGrid, string fileName)
            {
                HttpResponse m_Response = HttpContext.Current.Response;
                m_Response.Clear();
                m_Response.AddHeader("content-disposition",
                    string.Format("attachment;filename={0}", fileName));
                m_Response.Charset = "";           
                m_Response.ContentType = "application/octet-stream"; //"application/vnd.xls";
                m_Response.ContentEncoding = Encoding.UTF32;
                StringWriter stringWrite = new StringWriter();
                HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
                dataGrid.RenderControl(htmlWrite);
                m_Response.Write(stringWrite.ToString());
                m_Response.End();

    }

     

    Par contre la sortie n'est pas en bon format.

    Ex )

     Engagé => engagé

     Société => Société


    J'ai trouvé la solution :

    C'est l'utf8

     voilà le code:

    public static void ExportGridView( DataGrid dataGrid, string fileName )
    {  
    var response = HttpContext.Current.Response;
      response.Clear();
      response.AddHeader("content-disposition",string.Format("attachment; filename={0}", fileName));
      response.Charset=Encoding.UTF8.WebName;
      response.ContentType = "application/vnd.ms-excel";
      response.ContentEncoding=Encoding.UTF8;  
    using(var writer =new StringWriter())  
    using(var htmlWriter = new HtmlTextWriter(writer))  
    {
        dataGrid.RenderControl(htmlWriter);    
    string html = 
    "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>Test</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /></head><body>{0}</body></html>";
        response.Write(string.Format(html, writer.GetStringBuilder()));  
    }
      response.End();

     

    mercredi 1 septembre 2010 08:08

Toutes les réponses

  • Bonjour,

    J'essaierai la page de code Windows 1252. A priori l'encodage est dans le "header" http donc Excel ne verra de toute façon pas cette info. En l'absence de toute autre info, il va donc je pense utiliser la page de code de l'OS.

    Sinon peut-être essayer de préciser le charset en mettant l'encodage dans une balise meta (http://www.w3.org/TR/html4/charset.html#h-5.2.2).

    Il serait peut-être également souhaitable d'ajouter les balises html et body qui manquent sans doute dans le balisage actuel même si ce n'est pas strictement nécessaire.

    Plus généralement mon approche pour ce genre de problème est de faire le contraire, c'est à dire de créer un classeur Excel, de l'exporter en HTML et de voir ce qu'Excel préfère indiquer dans le fichier...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 31 août 2010 16:30
    Modérateur
  • Je veux exporter les donnée d'une grille dans un fichier Excel , ces données sont en français.

    J'ai fait cela :

     

    public static void ExportGridView( DataGrid dataGrid, string fileName)
            {
                HttpResponse m_Response = HttpContext.Current.Response;
                m_Response.Clear();
                m_Response.AddHeader("content-disposition",
                    string.Format("attachment;filename={0}", fileName));
                m_Response.Charset = "";           
                m_Response.ContentType = "application/octet-stream"; //"application/vnd.xls";
                m_Response.ContentEncoding = Encoding.UTF32;
                StringWriter stringWrite = new StringWriter();
                HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
                dataGrid.RenderControl(htmlWrite);
                m_Response.Write(stringWrite.ToString());
                m_Response.End();

    }

     

    Par contre la sortie n'est pas en bon format.

    Ex )

     Engagé => engagé

     Société => Société


    J'ai trouvé la solution :

    C'est l'utf8

     voilà le code:

    public static void ExportGridView( DataGrid dataGrid, string fileName )
    {  
    var response = HttpContext.Current.Response;
      response.Clear();
      response.AddHeader("content-disposition",string.Format("attachment; filename={0}", fileName));
      response.Charset=Encoding.UTF8.WebName;
      response.ContentType = "application/vnd.ms-excel";
      response.ContentEncoding=Encoding.UTF8;  
    using(var writer =new StringWriter())  
    using(var htmlWriter = new HtmlTextWriter(writer))  
    {
        dataGrid.RenderControl(htmlWriter);    
    string html = 
    "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>Test</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /></head><body>{0}</body></html>";
        response.Write(string.Format(html, writer.GetStringBuilder()));  
    }
      response.End();

     

    mercredi 1 septembre 2010 08:08