42 votes

Problème de codage d'exportation ASP.NET Excel

Je suis en train de faire certaines Exportations Excel sur le ASP.NET Site. Tout fonctionne à l'exception de l'Encodage. Quand je l'ouvre dans Excel, il ressemble à ceci:

Eingabe Kosten je Gerät Gerät: Gerätebezeichnung: Betriebsmittel Heizöl de â': 4 Dieselverbrauch en â': 4

C'est mon code:

Response.Clear();
Response.ContentType = "application/ms-excel";
Response.AddHeader("Content-Disposition", "inline;filename=NachkalkGeraete.xls;");
var writer = new HtmlTextWriter(Response.Output);

SomeControl.RenderControl(writer); /* FormView, Table, DataGrid... */

Response.End();

J'ai déjà essayé de définir explicitement l'Encodage.. mais pas de changement s'est produite:

Response.Clear();
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment; filename=NachkalkGeraete.xls");

Response.BufferOutput = true;
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.Charset = "UTF-8";
EnableViewState = false;

System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);

SomeControl.RenderControl(hw);

Response.Write(tw.ToString());
Response.End();

Ce qui est faux, s'il vous plaît?

134voto

PaN1C_Showt1Me Points 4153

Eh bien, j'ai découvert que le problème pouvait être dans l'en-tête du fichier Excel, qu'il ne contient pas la séquence d'octets BOM (au début du fichier représentant l'encodage utilisé).

Je l'ai donc fait de cette façon et cela fonctionne pour moi:

 Response.Clear();
Response.AddHeader("content-disposition","attachment;filename=Test.xls");   
Response.ContentType = "application/ms-excel";
Response.ContentEncoding = System.Text.Encoding.Unicode;
Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());

System.IO.StringWriter sw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(sw);

FormView1.RenderControl(hw);

Response.Write(sw.ToString());
Response.End();
 

11voto

David Kemp Points 5711

Avez-vous essayé de définir l'encodage dans une balise META dans le HTML?

 <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
 

Excel ne verra pas les en-têtes de réponse, il ne saura donc pas ce que sont Response.Encoding . La balise META lui permet de le découvrir.

11voto

Franz Points 41

Pour les cas où UTF8 est nécessaire ...

 FileInfo dataExportFile = new FileInfo(dsExport.Tables[0].Rows[0]["DataExportFile"].ToString());

Response.Clear();
Response.ContentType = "application/ms-excel";                        
Response.AddHeader("Content-Disposition", "attachment;filename=" + dataExportFile.Name);
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());
Response.TransmitFile(dataExportFile.FullName);
 

2voto

chan Points 11

ajouter Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X