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