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