文件下载的文件名中文乱码
但是,如果下载中文文件,页面在下载时会出现中文乱码或不能显示文件名的情况,原因是不同的浏览器默认对下载文件的编码方式不同,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);}
}
文件下载的文件名中文乱码相关推荐
- 解决各个浏览器文件下载出现文件名中文乱码问题
/*** 解决各个浏览器文件下载中文乱码问题* @param filename* @return*/public static String getFileName(HttpServletReques ...
- Java文件路径及文件名乱码_javaweb文件下载及文件名中文乱码处理
版权声明:yanghaha的原创博客 https://blog.csdn.net/qq_44758435/article/details/90636619 文件下载 需要先导入两个jar包 commo ...
- Linux-Windows主机目录和文件名中文乱码恢复
目录 Linux->Windows主机目录和文件名中文乱码恢复 声明 一. 乱码问题 二. 调试环境 三. 目录和文件名乱码恢复 3.1 可选方案 3.1.1 通过合适的编解码转换 3.1.2 ...
- Linux-Windows主机目录和文件名中文乱码恢复 - clover_toeic - 博客园
Linux->Windows主机目录和文件名中文乱码恢复 - clover_toeic - 博客园 https://www.cnblogs.com/clover-toeic/p/5235316. ...
- php header下载中文名称,PHP Header下载文件在IE文件名中文乱码问题
解决PHP Header下载文件在IE文件名中文乱码有两种常见的,一种是是把页面编码改成utf8,另一种是对中文url进入urlencode编码就可以解决了. 解决方案一,我的页面是utf-8编码,代 ...
- Spring 文件下载,出现中文乱码问题
Spring 文件下载,出现中文乱码问题 @GetMapping("/file/{id}")public ResponseEntity<InputStreamResource ...
- java下载文件时文件名中文乱码
下载文件时中文乱码是一个很常见的问题, 这不是第一次,但我希望它是最后一次了 这是个让人很头疼的问题, 明明在后台文件名还是正常的,为什么下载后文件名就乱码了呢 为什么会乱码:因为浏览器的编码和后台传 ...
- linux导入lifd文件乱码,wget文件名中文乱码
昨天打算用wget把 kerneltravel上的深入分析Linux内核源码全部下载到本机,没想到使用wget下载到本地时文件名全部是乱码: [cocobear@cocobear ~]$ wget - ...
- c# ZipFile.Extract解压后,文件名中文乱码
c#中使用ZipFile.Extract解压压缩包的时候,会出现中文文件名乱码的情况,原因是zipfile 会将所有文件名用 CP437 来编码,这就导致了中文乱码 using (var zip = ...
最新文章
- 如何使Git“忘记”已跟踪但现在位于.gitignore中的文件?
- linux源码安装nginx
- Java 两线程交替打印奇偶数(一)
- JavaFX UI控件教程(二十一)之Tooltip
- linux急救模式_抢救Linux! Windows XP支持今天终止
- 十六进制格式颜色转换成RGB格式颜色
- 学会演讲必看的五本书籍推荐
- Flask Web——Jinjia2模板的使用
- 读书笔记:聪明人用方格纸
- 后端返回Json字符串出现乱码问题解决
- 基于51单片机的12864液晶演示器驱动
- jQuery入门(1)
- 配置SqlServer发送邮件
- 计算机控制系统2017模拟题,计算机控制系统模拟试题.doc
- 用于播放视频的Html5元素是,HTML5多媒体播放video元素与audio元素详解
- Java高并发三部曲
- 技术评审到底需要评审哪些东西
- oppor17刷鸿蒙系统,OPPO R17性能出色 价格仅需2499入手不后悔
- 核心员工自我优势探索工作坊
- SuperMap 点云的使用
热门文章
- C++类的构造函数和析构函数
- Centos7 上安装mysql遇上的问题:mysql无法正常启动
- ACE中静态实例管理方式
- vue设置全局变量或函数
- Consumer group理解深入
- C# 从CIL代码了解委托,匿名方法,Lambda 表达式和闭包本质
- VS2008 快捷键总结
- 【定时任务】JDK java.util.Timer定时器的实现原理
- .adobe.ETH.btc.frendi.AUF.AYE.qwex后缀勒索病毒
- 【20180202】使用iptables做MySQL的端口转发