• .net MVC 下载文件乱码问题解决方案


    [csharp] view plain copy
     
     print?
    1. public ActionResult OverAllSummaryExport(string id)  
    2. {  
    3.     #region 解决中文乱码  
    4.     Response.HeaderEncoding = Encoding.UTF8;  
    5.     string fileName = "安全生产标准化自评结果整体输出.doc";  
    6.     if (Request.UserAgent != null)  
    7.     {  
    8.         string userAgent = Request.UserAgent.ToUpper();  
    9.         if (userAgent.IndexOf("FIREFOX", StringComparison.Ordinal) <= 0)  
    10.             fileName = ToUtf8String(fileName);  
    11.     }  
    12.     #endregion  
    13.     string HTMLStr =string.Format("<html><head><meta http-equiv=Content-Type content="text/html; charset=utf-8">{0}</head><body>{1}</body></html>",GetStyle(),GetBody(id));  
    14.     return File(Encoding.UTF8.GetBytes(HTMLStr), "application/vnd.ms-word", fileName);  
    15. }  
    [csharp] view plain copy
     
     print?
    1. /// <summary>   
    2. /// 解决下载名称在IE下中文乱码   
    3. /// </summary>   
    4. /// <param name="s"></param>   
    5. /// <returns></returns>   
    6. private String ToUtf8String(String s)  
    7. {  
    8.     StringBuilder sb = new StringBuilder();  
    9.     for (int i = 0; i < s.Length; i++)  
    10.     {  
    11.         char c = s[i];  
    12.         if (c >= 0 && c <= 255)  
    13.         {  
    14.             sb.Append(c);  
    15.         }  
    16.         else  
    17.         {  
    18.             byte[] b;  
    19.             try  
    20.             {  
    21.                 b = Encoding.UTF8.GetBytes(c.ToString());  
    22.             }  
    23.             catch (Exception ex)  
    24.             {  
    25.                 b = new byte[0];  
    26.             }  
    27.             for (int j = 0; j < b.Length; j++)  
    28.             {  
    29.                 int k = b[j];  
    30.                 if (k < 0) k += 256;  
    31.   
    32.                 sb.Append("%" + Convert.ToString(k, 16).ToUpper());  
    33.             }  
    34.         }  
    35.     }  
    36.     return sb.ToString();  
    37. }  



    这本是要输出一个word,但是太麻烦,所以打算用拼接html字符串,然后输出时文件后缀名为doc

    其中文件名称的乱码和文件内容的乱码很纠结。

    这段代码解决了下载名称的乱码问题。

    火狐和chrome中没有此问题,就是IE浏览器下载时文件名乱码,所以判断了下浏览器类型。

  • 相关阅读:
    SpringBoot:Web开发
    java @Value注解 和 @Data注解
    携程 Apollo 配置中心传统 .NET 项目集成实践
    Spring Boot 整合 JPA 使用多个数据源
    ibatis 核心原理解析!
    Spring Boot 面试,一个问题就干趴下了!
    在Docker中部署Spring Boot项目
    REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案
    超全详解Java开发环境搭建
    SpringBoot入门(一):从HelloWorld开始
  • 原文地址:https://www.cnblogs.com/zhangxiaolei521/p/5587353.html
Copyright © 2020-2023  润新知