C#导出csv文件 防止中文乱码的解决方案

  1. #region 导出CSV下载  
  2. string exportFileName = "Export" + DateTime.Now.ToString("yyyyMMddHHmmss");  
  3. System.Web.HttpContext context = System.Web.HttpContext.Current;  
  4. StringBuilder sb = new StringBuilder();  
  5. sb.Append("FirstName,LastName,PhoneNo.,State,TimeZone,ZipCode\n");  
  6. for (int i = 0; i < result.PhoneList.Count; i++)  
  7. {  
  8.     sb.Append(result.PhoneList[i].FirstName + "," + result.PhoneList[i].LastName + "," + result.PhoneList[i].Phone + "," + result.PhoneList[i].State + "," + result.PhoneList[i].TimeZone + "," + result.PhoneList[i].ZipCode + "\n");  
  9. }  
  10. StringWriter sw = new StringWriter(sb);  
  11. sw.Close();  
  12. context.Response.Clear();  
  13. /*  
  14.  * Acme 2012-07-04 edit  
  15.  *   
  16. context.Response.Charset = "gb2312";  
  17. context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");  
  18. context.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; // "application/octet-stream"; //"application/vnd.ms-excel"; //application/vnd.openxmlformats-officedocument.spreadsheetml.sheet                    
  19. //context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", fileName));  
  20. */  
  21. //below is new writing    
  22. context.Response.Charset = "UTF-8";  
  23. context.Response.ContentEncoding = System.Text.Encoding.UTF8;  
  24. context.Response.HeaderEncoding = System.Text.Encoding.UTF8;  
  25. context.Response.ContentType = "text/csv";  
  26. //主要是下面这一句  
  27. context.Response.BinaryWrite(new byte[] { 0xEF, 0xBB, 0xBF });  
  28. context.Response.Write(sw);  
  29. context.Response.AppendHeader("content-disposition""attachment; filename=" + HttpUtility.UrlEncode(exportFileName + ".csv", System.Text.Encoding.UTF8).Replace("+""%20"));  
  30. //context.Response.OutputStream.Write(fileData, 0, fileData.Length);    
  31. context.Response.Flush();  
  32. context.Response.End();  
  33. #endregion  
        #region 导出CSV下载
        string exportFileName = "Export" + DateTime.Now.ToString("yyyyMMddHHmmss");
        System.Web.HttpContext context = System.Web.HttpContext.Current;
        StringBuilder sb = new StringBuilder();
        sb.Append("FirstName,LastName,PhoneNo.,State,TimeZone,ZipCode\n");
        for (int i = 0; i < result.PhoneList.Count; i++)
        {
            sb.Append(result.PhoneList[i].FirstName + "," + result.PhoneList[i].LastName + "," + result.PhoneList[i].Phone + "," + result.PhoneList[i].State + "," + result.PhoneList[i].TimeZone + "," + result.PhoneList[i].ZipCode + "\n");
        }
        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(exportFileName + ".csv", System.Text.Encoding.UTF8).Replace("+", "%20"));
        //context.Response.OutputStream.Write(fileData, 0, fileData.Length);  
        context.Response.Flush();
        context.Response.End();
        #endregion