文件下载乱码问题分析与解决
文件下载时的乱码问题:1.关于下载时中文名称资源查找不到原因:<a href='${pageContext.request.contextPath}/download?filename=天空.mp3'>天空.mp3</a>这是get请求。在服务器端:String filename = request.getParameter("filename");解决: new String(filename.getBytes("iso8859-1"),"utf-8"); 2.下载文件显示时的中文乱码问题response.setHeader("content-disposition", "attachment;filename="+filename);IE:要求filename必须是utf-8码firefox:要求filename必须是base64编码.问题:怎样判断浏览器?String agent=request.getHeader("user-agent");if (agent.contains("MSIE")) {// IE浏览器filename = URLEncoder.encode(filename, "utf-8");} 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");
处理IE浏览器与Firefox浏览器乱码问题
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 if (agent.contains("Chrome")) {
// google浏览器
filename = URLEncoder.encode(filename, "utf-8");
} else {
// 其它浏览器
filename = URLEncoder.encode(filename, "utf-8");
}
package cn.learn.web.servlet;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import sun.misc.BASE64Encoder;public class DownloadServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 1.得到要下载 的文件名称String filename = request.getParameter("filename");filename = new String(filename.getBytes("iso8859-1"), "utf-8");// 解决中文乱码// 2.在d:/upload目录下查找这个文件是否存在File file = new File("d:/upload/" + filename);if (file.exists()) {// /文件存在,完成下载// 下载注意事项1--设置下载文件的mimeTypeString mimeType = this.getServletContext().getMimeType(filename);response.setContentType(mimeType);String agent = request.getHeader("user-agent");if (agent.contains("MSIE")) {// IE浏览器filename = URLEncoder.encode(filename, "utf-8");} 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");}// 下载注意事项2--永远是下载response.setHeader("content-disposition", "attachment;filename="+ filename);FileInputStream fis = new FileInputStream(file); // 读取要下载文件的内容OutputStream os = response.getOutputStream(); // 将要下载的文件内容通过输出流写回到浏览器端.int len = -1;byte[] b = new byte[1024 * 100];while ((len = fis.read(b)) != -1) {os.write(b, 0, len);os.flush();}os.close();fis.close();} else {throw new RuntimeException("下载资源不存在.");}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
文件下载乱码问题分析与解决相关推荐
- Python3爬虫之中文乱码问题分析与解决方法
前言 分析 解决方法 前言: 今天简单爬取一个网页的源代码时,发现出现了乱码 python代码: import requestsreq = requests.get("http://www. ...
- Android中文乱码的分析与解决
Android中文乱码解决方法: 在手机与PC之间进行socket或HTTP通讯时,常常会出现中文乱码问题,其主要原因在于手机端字符编码默认为UTF-8,而服务器PC端默认为gbk或gb2312. 手 ...
- zhs16gbk对应mysql_NLS_LANG 数据库字符集中文乱码问题分析和解决
前言 已经有 3 年多没再关心或者遇到编码格式的问题了,一是离 Oracle 数据库操作远了,二是现在的 Terminal,IDE 和操作系统语言环境配置都很标准,比如清一色的 UTF-8 编码和 U ...
- 服务端返回中文乱码的分析和解决办法
一.介绍 本文介绍了Controller端,返回json的几个写法和遇到的坑,如遇见中文乱码可以按照下面详细情况介绍换一种方式解决你的问题. 二.前提背景 json格式:FastJson Contro ...
- java printwriter乱码_PrintWriter返回乱码的分析及解决
用response得到输出流,即response.getOuptStream(); 返回值为ServletOutputStream 对象,即JSP的out对象,要么用response得到输出对象Pri ...
- 常见乱码问题分析和总结
夏 怀英 和 David Chen 2018 年 1 月 17 日发布 在我们的日常工作生活中一定碰到过下面的情况: 场景 1: 安装完某个软件后,看到的安装程序变成类似这样的一组字符" µ ...
- Java Web乱码分析及解决方式(一)——GET请求乱码
引言: 在进行Web開始时.乱码是我们最常常遇到也是最主要的问题.有经验的程序员非常easy能解决,刚開始学习的人则easy被泥潭困住. 并且非常多时候.我们即使攻克了乱码问题也是不明就里.往 ...
- 微信公众号回复、接收消息中中文乱码问题的分析及解决
微信公众号回复.接收消息中文乱码问题的分析及解决 为了方便,我们把接收时用的编码记为A.把处理时用的编码记为B.把返回时用的编码记为C 文章目录 微信公众号回复.接收消息中文乱码问题的分析及解决 中文 ...
- SQLServer乱码问题的分析及解决方法(中文字符被存入数据库后,显示为乱码)
SQLServer乱码问题的分析及解决方法(中文字符被存入数据库后,显示为乱码) 参考文章: (1)SQLServer乱码问题的分析及解决方法(中文字符被存入数据库后,显示为乱码) (2)https: ...
最新文章
- Python中如何拷贝一个对象?(赋值、深拷贝、浅拷贝的区别)
- java打开网页横屏_巅峰之战!三款最热java手机浏览器横屏
- 3,SQL语句及数据库优化
- 两大主流Web服务器之分析与对比
- 用程序算法做人生选择
- Spring Stateless State Security第3部分:JWT +社会认证
- python代码模板_python 代码模板
- python做统计_利用 Python 进行统计
- 数据泵避免个别表数据的导出
- xgboost4j jar包下载
- C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件
- 基于weber的齿轮啮合刚度计算
- 计算机基础竞赛知识试题,计算机基础知识及基本技能操作竞赛试题
- 软考中级软件设计师——数据库系统
- 微信检测器 微信过滤工具
- 机械键盘无冲测试软件,全键无冲 键盘测试 优缺点总结
- 禁止查看网页源文件的代码
- 2022山东省安全员C证复训题库模拟考试平台操作
- 初探强化学习(2)rollout算法
- Incapsula 反爬虫
热门文章
- C++实现另一个猜数字游戏
- SQL Server里的 ISNULL 与 Oracle 中的 NULLIF
- [ZOJ 4024] Peak
- 洛谷P1155 双栈排序
- 2018-05-17 第十一天
- 在聊Java中的equals方法
- ALI的Tensorflow炼成与GAN科普
- 解决Mac nginx问题 [emerg] 54933#0: bind() to 0.0.0.0:80 failed (13: Permission denied)
- LINQ根据某字段GroupBy
- 版本管理工具Git(2)git的使用