asp.net导出到Excel UTF-8

这是我的代码:

var model = _db.FacebookInfo.OrderByDescending(f => f.Followers).ToList(); var grid = new System.Web.UI.WebControls.GridView(); grid.DataSource = (from u in model select new { fullname = System.Text.RegularExpressions.Regex.Replace(u.FullName, "<span .*?>(.*?)", ""), followers = u.Followers, friends = u.Friends, url = u.FbLink }).ToList(); grid.DataBind(); Response.ClearContent(); Response.AddHeader("content-disposition", "attachment; filename=Nana bregvadze Friends.xls"); Response.ContentType = "application/excel"; StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); grid.RenderControl(htw); Response.Write(sw.ToString()); Response.End(); 

它只是创build一个excel文件,但我有一个unicode问题,无法读取格鲁吉亚charachters。 看图片:

在这里输入图像说明

也许这是一个重复,但没有解决scheme为我工作。

您的代码不会创build一个真正的XLSX文件,它会创build一个伪造头和扩展名的HTML表。 Excel将使用最终用户的默认设置和区域设置导入此文件。

而不是伪造Excel文件,您可以使用像EPPlus这样的库轻松地创build一个真正的XLSX文件,代码最less 。 Codeplex网站甚至还有一个Web应用程序示例。 您可以在您的情况下使用LoadFromCollection而不是LoadFromDataTable

  using (ExcelPackage pck = new ExcelPackage()) { //Create the worksheet var ws = pck.Workbook.Worksheets.Add("Demo"); //Load the datatable into the sheet, starting from cell A1. // Print the column names on row 1 var table=ws.Cells["A1"].LoadFromCollection(model, true); //Write it back to the client Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("content-disposition", "attachment; filename=ExcelDemo.xlsx"); Response.BinaryWrite(pck.GetAsByteArray()); } 

请注意, table是一个实际的ExcelRange对象,可以给出一个名称,样式等

Okey我解决了这个问题:只需将Response.ClearContent()更改为Response.Clear()并添加即可

 Response.Write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />") 

完整代码:

  var model = _db.FacebookInfo.OrderByDescending(f => f.Followers).ToList(); var grid = new System.Web.UI.WebControls.GridView(); grid.DataSource = (from u in model select new { fullname = System.Text.RegularExpressions.Regex.Replace(u.FullName, "<span .*?>(.*?)", ""), followers = u.Followers, friends = u.Friends, url = u.FbLink }).ToList(); grid.DataBind(); Response.Clear(); Response.AddHeader("content-disposition", "attachment; filename=Nana bregvadze Friends.xls"); Response.ContentType = "application/excel"; Response.Write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"); StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); grid.RenderControl(htw); Response.Write(sw.ToString()); Response.End();