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


Что случилось, пожалуйста?

441   6  

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?

<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
Excel не будет видеть заголовки ответов, поэтому он не будет знать, что такое 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 ;

Надеюсь, это поможет

Добавить Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());

Вы можете попробовать использовать " сервер.HtmlDecode "для декодирования таких слов, как "João"

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e){
String wrong = "Jo&#227;o";
String corrected = Server.HtmlDecode(wrong);}

Comments

    Ничего не найдено.