C#生成的Excel文件 – 问题与特殊的字符
首先,这是我的代码:
DataTable usersReport = reportsService.GenerateUsersReport(); var grid = new GridView(); grid.DataSource = usersReport; grid.DataBind(); Response.ClearContent(); Response.Buffer = true; Response.AddHeader("content-disposition", "attachment; filename=UsersReport.xls"); Response.ContentType = "application/ms-excel"; Response.Charset = ""; StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); grid.RenderControl(htw); Response.Output.Write(sw.ToString()); Response.Flush(); Response.End();
正如你所看到的,我只是简单地生成用户报告。 当我在excel中打开这个文件时,特殊的字符就会出现问题,比如ś,ż,ź,ó,ę,ą
等等。
我可以看到ImiÄ™
而不是ImiÄ™
。 与GyżyÅ„ski
相同的问题
我该如何解决?
编辑:
添加这些行:
Response.Charset = ""; Response.ContentEncoding = System.Text.Encoding.Default;
现在Imię
看起来像Imiê
。 总之 – 仍然没有
你试过这个吗? 可能是Excel文件的标题缺less字节顺序标记(BOM)序列,请尝试使用GetPreamble
Response.Clear(); Response.AddHeader("content-disposition", "attachment; filename=UsersReport.xls"); Response.ContentType = "application/ms-excel"; Response.ContentEncoding = System.Text.Encoding.Unicode; Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble()); StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); grid.RenderControl(htw); Response.Write(sw.ToString()); Response.End();
经过一番调查,我发现一个解决scheme。 重要的是源HTML的<meta>
标签。
这样一行:
Response.Output.Write(sw.ToString());
应该看起来像:
Response.Output.Write("<meta http-equiv='Content-Type' content='application/vnd.ms-excel; charset=utf-8'>" + sw.ToString());