ServletResponse下载文件乱码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ServletResponse下载文件乱码相关的知识,希望对你有一定的参考价值。
借助于强大的搜索引擎和本地试验。
通常来说解决乱码两个方式:
1、把文件名(包括汉字)编码成UTF-8
String downloadOrigalFile = "测试文件乱码.xlsx";
String downloadFileName = java.net.URLEncoder.encode(downloadOrigalFile, "UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=" + downloadFileName);
如果文件名中出现空格,需要把空格替换为%20,UTF-8下+表示空格
downloadFileName = downloadFileName.replace("+", "%20");
2、把文件名编码成ISO-8859-1(因为默认编码是ISO-8859-1)
String downloadOrigalFile = "测试文件乱码.xlsx";
final String LOCALE_ENCODING = "gb2312";
// 此处的LOCALE_ENCODING=gb2312:通常可以使用java的System.getProperties()遍历察看获得,
// 一般有两个值可能和此有关,请参考结合实际情况使用。
// sun.jnu.encoding=GBK
// file.encoding=UTF-8
final String DEFAULT_ENCODING = "ISO-8859-1";
String downloadFileName = new String(downloadOrigalFile.getBytes(LOCALE_ENCODING), DEFAULT_ENCODING);
如果文件名中出现空格,需要把空格替换为%20
downloadFileName = downloadFileName.replace(" ", "%20");
// 此处的getBytes()如果不指定编码,在跨平台的时候可能会出现问题,建议明确指定编码。
response.setHeader("Content-Disposition", "attachment; filename=" + downloadFileName);
====
3、如果要在浏览器地址中显示中文,一般需要修改web容器的默认编码URIEncoding="UTF-8"
(即用get的方式直接下载文件)
例如tomcat容器,在TOMCAT_HOME/conf/server.xml中的如下位置加入
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8"
connectionTimeout="20000"
redirectPort="8443" />
4、URL中常用的特殊编码
+ URL 中+号表示空格 %2B
空格 URL中的空格可以用+号或者编码 %20
/ 分隔目录和子目录 %2F
? 分隔实际的URL和参数 %3F
% 指定特殊字符 %25
# 表示书签 %23
& URL 中指定的参数间的分隔符 %26
= URL 中指定参数的值 %3D
参照链接:
万恶的公司代码,都是用的快照,所以对各位参照引用作者非常抱歉。。。
本文出自 “雨无声” 博客,请务必保留此出处http://longjubing.blog.51cto.com/2669571/1759361
以上是关于ServletResponse下载文件乱码的主要内容,如果未能解决你的问题,请参考以下文章