Попробуйте использовать ISO-8859-1
:
public static void ExportGridView(DataGrid dataGrid, string fileName)
{
var response = HttpContext.Current.Response;
response.Clear();
response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName));
var isoEncoding = Encoding.GetEncoding("iso-8859-1");
response.Charset = isoEncoding.WebName;
response.ContentType = "application/vnd.ms-excel";
response.ContentEncoding = isoEncoding;
using (var writer = new StringWriter())
using (var htmlWriter = new HtmlTextWriter(writer))
{
dataGrid.RenderControl(htmlWriter);
response.Write(writer.GetStringBuilder().ToString());
}
response.End();
}
Еще одна альтернатива, и, возможно, лучше - это сгенерировать целую HTML-страницу и указать кодировку UTF8, которая, по-моему, лучше:
public static void ExportGridView(DataGrid dataGrid, string fileName)
{
var response = HttpContext.Current.Response;
response.Clear();
response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName));
response.Charset = Encoding.UTF8.WebName;
response.ContentType = "application/vnd.ms-excel";
response.ContentEncoding = Encoding.UTF8;
using (var writer = new StringWriter())
using (var htmlWriter = new HtmlTextWriter(writer))
{
dataGrid.RenderControl(htmlWriter);
string html = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>Test</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /></head><body>{0}</body></html>";
response.Write(string.Format(html, writer.GetStringBuilder()));
}
response.End();
}