博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
各浏览器下载文件名不乱码的解决办法
阅读量:5334 次
发布时间:2019-06-15

本文共 1292 字,大约阅读时间需要 4 分钟。

在项目中发现,使用Safari下载中文名文件的时候,下载的文件名是乱码的问题。但是这个问题在IE,Firefox,Chrome中是没有的。原先以为是Safari的bug,但是细细研究之下你会发现这个简单的文件下载问题在HTTP协议里经历了多少波折。

这里直接贴出java代码

/*** 
* 浏览器下载文件时需要在服务端给出下载的文件名,当文件名是ASCII字符时没有问题* 当文件名有非ASCII字符时就有可能出现乱码** 这里的实现方式参考这篇文章* http://blog.robotshell.org/2012/deal-with-http-header-encoding-for-file-download/** 最终设置的response header是这样:** Content-Disposition: attachment;*                      filename="encoded_text";*                      filename*=utf-8''encoded_text** 其中encoded_text是经过RFC 3986的“百分号URL编码”规则处理过的文件名* 
* @param response* @param filename* @return*/public static void setFileDownloadHeader(HttpServletResponse response, String filename) { String headerValue = "attachment;"; headerValue += " filename=\"" + encodeURIComponent(filename) +"\";"; headerValue += " filename*=utf-8''" + encodeURIComponent(filename); response.setHeader("Content-Disposition", headerValue);}/***
* 符合 RFC 3986 标准的“百分号URL编码”* 在这个方法里,空格会被编码成%20,而不是+* 和浏览器的encodeURIComponent行为一致* 
* @param value* @return*/public static String encodeURIComponent(String value) { try { return URLEncoder.encode(value, "UTF-8").replaceAll("\\+", "%20"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return null; }}

转载自:

感谢大神解决长久以来的问题。

转载于:https://www.cnblogs.com/ShawnYang/p/8668504.html

你可能感兴趣的文章
centos 双网卡双IP设置
查看>>
时间戳与日期的相互转换
查看>>
获取手机当前经纬度的方法
查看>>
oracle 导出与导入
查看>>
规避字符串在传递过程中造成的编码问题
查看>>
HTTP协议
查看>>
jmeter(五)创建web测试计划
查看>>
使用git pull文件时和本地文件冲突怎么办?
查看>>
spring aop advice注解实现的几种方式
查看>>
msp430入门编程03
查看>>
python基本数据类型
查看>>
1305: [CQOI2009]dance跳舞 - BZOJ
查看>>
关于TDD的思考
查看>>
Cocos2d-x学习之windows 7 android环境搭建
查看>>
将html代码中的大写标签转换成小写标签
查看>>
jmeter多线程组间的参数传递
查看>>
零散笔记
查看>>
第1章2节《MonkeyRunner源码剖析》概述:边界(原创)
查看>>
ubuntu16下面 redis 无法链接到客户端问题
查看>>
android下实现4分屏播放4路高清h264格式的rtsp流
查看>>