ASP.NET проблема с кодировкой экспорта Excel
Я делаю некоторые экспорта Excel на ASP.NET сайт.
Все работает, кроме кодировки. Когда я открываю его в Excel, он выглядит так:
Eingabe Kosten je Gerät Gerät:
Gerätebezeichnung:
Betriebsmittel HeizÃ*L в": 4
Dieselverbrauch in â': 4
Вот мой код:
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();
Я уже пытался явно установить кодировку.. но никаких изменений не произошло:
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();
Что случилось, пожалуйста?
6 ответов:
Ну я обнаружил, что проблема может быть в заголовке файла excel, что он не содержит последовательность байтовBOM (в начале файла, представляющего используемую кодировку).
Поэтому я сделал это таким образом, и это работает для меня:
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();
Вы пробовали установить кодировку в мета-теге в HTML?
Excel не будет видеть заголовки ответов, поэтому он не будет знать, что такое<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
Response.Encoding
. Мета-тег позволяет это выяснить.
Для случаев, когда требуется UTF8...
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);
Я получил ту же проблему с испанскими символами и решил ее с помощью этой строки кода.
response.ContentEncoding = System.Text.Encoding.Default ;
Надеюсь, это поможет
Вы можете попробовать использовать " сервер.HtmlDecode "для декодирования таких слов, как "João"
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e){ String wrong = "João"; String corrected = Server.HtmlDecode(wrong);}
Comments