C# 中文数据导出CSV出现乱码解决方法 如下,在文件输出流前加一段二进制流的输出。VS2010测试良好,英文操作系统。
public static void ExportToCsv (HttpContext context, StringBuilder sb, string fileName)
{
StringWriter sw = new StringWriter(sb);
sw.Close();
context.Response.Clear();
/*
* Acme 2012-07-04 edit
*
context.Response.Charset = "gb2312";
context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
context.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; // "application/octet-stream"; //"application/vnd.ms-excel"; //application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
//context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", fileName));
*/
//below is new writing
context.Response.Charset = "UTF-8";
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
context.Response.HeaderEncoding = System.Text.Encoding.UTF8;
context.Response.ContentType = "text/csv";
//主要是下面这一句
context.Response.BinaryWrite(new byte[] { 0xEF, 0xBB, 0xBF });
context.Response.Write(sw);
context.Response.AppendHeader("content-disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8).Replace("+", "%20"));
//context.Response.OutputStream.Write(fileData, 0, fileData.Length);
context.Response.Flush();
context.Response.End();
}