但是,如果下载中文文件,页面在下载时会出现中文乱码或不能显示文件名的情况,原因是不同的浏览器默认对下载文件的编码方式不同,ie是UTF-8编码方式,而火狐    浏览器是Base64编码方式。所里这里需要解决浏览器兼容性问题,解决浏览器兼容性问题的首要任务是要辨别访问者是ie还是火狐(其他),通过Http请求体中的一个属性可以辨别

解决乱码方法如下(不要记忆--了解):if (agent.contains("MSIE")) {// IE浏览器filename = URLEncoder.encode(filename, "utf-8");filename = filename.replace("+", " ");
} else if (agent.contains("Firefox")) {// 火狐浏览器
BASE64Encoder base64Encoder = new BASE64Encoder();filename = "=?utf-8?B?"+ base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
} else {// 其它浏览器filename = URLEncoder.encode(filename, "utf-8");
}其中agent就是请求头User-Agent的值
package com.learn.content;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import sun.misc.BASE64Encoder;public class DownLoadServlet2 extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//*******文件名称是中文的下载*******//获得要下载的文件的名称String filename = request.getParameter("filename");//????.jpg//解决获得中文参数的乱码----下节课讲filename = new String(filename.getBytes("ISO8859-1"),"UTF-8");//美女.jpg//获得请求头中的User-AgentString agent = request.getHeader("User-Agent");//根据不同浏览器进行不同的编码String filenameEncoder = "";if (agent.contains("MSIE")) {// IE浏览器filenameEncoder = URLEncoder.encode(filename, "utf-8");filenameEncoder = filenameEncoder.replace("+", " ");} else if (agent.contains("Firefox")) {// 火狐浏览器BASE64Encoder base64Encoder = new BASE64Encoder();filenameEncoder = "=?utf-8?B?"+ base64Encoder.encode(filename.getBytes("utf-8")) + "?=";} else {// 其它浏览器filenameEncoder = URLEncoder.encode(filename, "utf-8");              }//要下载的这个文件的类型-----客户端通过文件的MIME类型去区分类型response.setContentType(this.getServletContext().getMimeType(filename));//告诉客户端该文件不是直接解析 而是以附件形式打开(下载)----filename="+filename 客户端默认对名字进行解码response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder);//获取文件的绝对路径String path = this.getServletContext().getRealPath("download/"+filename);//获得该文件的输入流InputStream in = new FileInputStream(path);//获得输出流---通过response获得的输出流 用于向客户端写内容ServletOutputStream out = response.getOutputStream();//文件拷贝的模板代码int len = 0;byte[] buffer = new byte[1024];while((len=in.read(buffer))>0){out.write(buffer, 0, len);}in.close();//out.close();}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}
}

文件下载的文件名中文乱码相关推荐

  1. 解决各个浏览器文件下载出现文件名中文乱码问题

    /*** 解决各个浏览器文件下载中文乱码问题* @param filename* @return*/public static String getFileName(HttpServletReques ...

  2. Java文件路径及文件名乱码_javaweb文件下载及文件名中文乱码处理

    版权声明:yanghaha的原创博客 https://blog.csdn.net/qq_44758435/article/details/90636619 文件下载 需要先导入两个jar包 commo ...

  3. Linux-Windows主机目录和文件名中文乱码恢复

    目录 Linux->Windows主机目录和文件名中文乱码恢复 声明 一. 乱码问题 二. 调试环境 三. 目录和文件名乱码恢复 3.1 可选方案 3.1.1 通过合适的编解码转换 3.1.2 ...

  4. Linux-Windows主机目录和文件名中文乱码恢复 - clover_toeic - 博客园

    Linux->Windows主机目录和文件名中文乱码恢复 - clover_toeic - 博客园 https://www.cnblogs.com/clover-toeic/p/5235316. ...

  5. php header下载中文名称,PHP Header下载文件在IE文件名中文乱码问题

    解决PHP Header下载文件在IE文件名中文乱码有两种常见的,一种是是把页面编码改成utf8,另一种是对中文url进入urlencode编码就可以解决了. 解决方案一,我的页面是utf-8编码,代 ...

  6. Spring 文件下载,出现中文乱码问题

    Spring 文件下载,出现中文乱码问题 @GetMapping("/file/{id}")public ResponseEntity<InputStreamResource ...

  7. java下载文件时文件名中文乱码

    下载文件时中文乱码是一个很常见的问题, 这不是第一次,但我希望它是最后一次了 这是个让人很头疼的问题, 明明在后台文件名还是正常的,为什么下载后文件名就乱码了呢 为什么会乱码:因为浏览器的编码和后台传 ...

  8. linux导入lifd文件乱码,wget文件名中文乱码

    昨天打算用wget把 kerneltravel上的深入分析Linux内核源码全部下载到本机,没想到使用wget下载到本地时文件名全部是乱码: [cocobear@cocobear ~]$ wget - ...

  9. c# ZipFile.Extract解压后,文件名中文乱码

    c#中使用ZipFile.Extract解压压缩包的时候,会出现中文文件名乱码的情况,原因是zipfile 会将所有文件名用 CP437 来编码,这就导致了中文乱码 using (var zip = ...

最新文章

  1. 如何使Git“忘记”已跟踪但现在位于.gitignore中的文件?
  2. linux源码安装nginx
  3. Java 两线程交替打印奇偶数(一)
  4. JavaFX UI控件教程(二十一)之Tooltip
  5. linux急救模式_抢救Linux! Windows XP支持今天终止
  6. 十六进制格式颜色转换成RGB格式颜色
  7. 学会演讲必看的五本书籍推荐
  8. Flask Web——Jinjia2模板的使用
  9. 读书笔记:聪明人用方格纸
  10. 后端返回Json字符串出现乱码问题解决
  11. 基于51单片机的12864液晶演示器驱动
  12. jQuery入门(1)
  13. 配置SqlServer发送邮件
  14. 计算机控制系统2017模拟题,计算机控制系统模拟试题.doc
  15. 用于播放视频的Html5元素是,HTML5多媒体播放video元素与audio元素详解
  16. Java高并发三部曲
  17. 技术评审到底需要评审哪些东西
  18. oppor17刷鸿蒙系统,OPPO R17性能出色 价格仅需2499入手不后悔
  19. 核心员工自我优势探索工作坊
  20. SuperMap 点云的使用

热门文章

  1. C++类的构造函数和析构函数
  2. Centos7 上安装mysql遇上的问题:mysql无法正常启动
  3. ACE中静态实例管理方式
  4. vue设置全局变量或函数
  5. Consumer group理解深入
  6. C# 从CIL代码了解委托,匿名方法,Lambda 表达式和闭包本质
  7. VS2008 快捷键总结
  8. 【定时任务】JDK java.util.Timer定时器的实现原理
  9. .adobe.ETH.btc.frendi.AUF.AYE.qwex后缀勒索病毒
  10. 【20180202】使用iptables做MySQL的端口转发