2010-08-31 149 views
1

我想将数据从DaraGrid导出到Excel文件中。在法语 这里有了这些数据,你是我的方法:编码问题

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

} 

否则输出不是一个好的法国格式

例)

从事=>engagé

Société=>Société©

回答

6

尝试使用ISO-8859-1

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)); 
    var isoEncoding = Encoding.GetEncoding("iso-8859-1"); 
    response.Charset = isoEncoding.WebName; 
    response.ContentType = "application/vnd.ms-excel"; 
    response.ContentEncoding = isoEncoding; 
    using (var writer = new StringWriter()) 
    using (var htmlWriter = new HtmlTextWriter(writer)) 
    { 
     dataGrid.RenderControl(htmlWriter); 
     response.Write(writer.GetStringBuilder().ToString()); 
    } 
    response.End(); 
} 

另一种方法可能会更好是生成一个完整的HTML页面,并指定UTF8编码,这恕我直言,是更好:

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(); 
} 
+0

非常感谢Dick,Darin和所有回答的人。 你的第二个解决方案Darin是完美的,但是ISO-8859-1没有解决问题。这是UTF8 – 2010-08-31 16:20:00

+0

我试过第二个..但它不适用于我.. y:S? – Grace 2011-06-03 07:17:17

+0

第二种方法适用于我,第一种方法(没有完整的HTML语法)没有。使用MS Office Professional Plus 2013打开保存的文件。 – 2013-12-03 15:13:54

0

将内容编码设置为UTF8应确保Excel文件中的特殊符号将会保留我被解释得很好。当然,您需要确保在客户端计算机上安装了法语字体。

0

我会怀疑他/她使用utf32是有原因的。我会试图完全打破这条线,看看会发生什么。如果从Excel到DataGrid,utf8会起作用我认为你就在那里,但它是相反的。这条线甚至可能不是问题。

我更怀疑那些“StringWriter”对象。我对这些并不熟悉。如果你使用html来移动东西,浏览器不应该能够识别utf32,而是把它看作是utf16,这可能是你的问题。