zoukankan      html  css  js  c++  java
  • dotnet 文件下载后文件名乱码

    Response.ContentType = "application/x-msdownload;Charset=utf-8";

    首先是Encoding

    Response.ContentEncoding = System.Text.Encoding.UTF8;


    然后是FileName的地方用

    System.Web.HttpUtility.UrlEncode(name)

    然后把用于响应输出的aspx文件保存为UTF-8格式
    最后是在webconfig里面设置

    <globalization requestEncoding="UTF-8" responseEncoding="UTF-8"/>

    一个解决办法是,:

     在HttpUtility  的UrlEncode之后,  将  "+" 替换成"%20"(如果原来是 "+"   则被转换成"%2b" ), 如:  
      fileName=HttpUtility.UrlEncode(fileName,   Encoding.UTF8);  
      fileName=fileName.Replace("+",   "%20");  
      不明白微软为什么要把空格转换成加号而不是"%20".记得JDK的UrlEncoder是将空格转换成"%20"的.  
      经检查,在.Net2.0也是这样.  

    =========================================================================

    string fileName="中文.xls";

    string filePath = @"/UpLoad/Reports"

    FileInfo file = new FileInfo(System.Web.HttpContext.Current.Server.MapPath(filePath)+fileName);
       Response.Charset = "utf-8";
       Response.ContentEncoding = System.Text.Encoding.UTF8;

       // 添加头信息,为"文件下载/另存为"对话框指定默认文件名
       Response.AddHeader("Content-Disposition", "attachment; filename=" +HttpUtility.UrlEncode("下载文件"+".xls",System.Text.Encoding.UTF8));
       // 添加头信息,指定文件大小,让浏览器能够显示下载进度
       Response.AddHeader("Content-Length", file.Length.ToString());
       // 指定返回的是一个不能被客户端读取的流,必须被下载
       Response.ContentType = "application/ms-excel";
       // 把文件流发送到客户端
       Response.WriteFile(file.FullName);
       // 停止页面的执行
       Response.End();

  • 相关阅读:
    C#多线程下更新UI的几种方法
    .net WebApi使用swagger 美化接口文档
    C#内存管理
    LINQ 推迟查询的执行
    C#多播委托详解
    泛型委托
    使用 ref 和 out 传递数组注意事项
    何时使用委托而不使用接口
    委托中的协变和逆变
    细说SQL Server数据类型
  • 原文地址:https://www.cnblogs.com/shineqiujuan/p/1335825.html
Copyright © 2011-2022 走看看