JSP页面下载文件,文件名乱码问题。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSP页面下载文件,文件名乱码问题。相关的知识,希望对你有一定的参考价值。

点击下载,弹出框的文件名没有问题,但是打开就变乱码了。还好,里面的内容正常。
我的代码:<%response.reset();
String ATTACHMENTSTOREPATH = File.separator + "local"
+ File.separator + "uploads" + File.separator + "wf"
+ File.separator + "cpi";
nt docId = 0;
int revNo = -1;
int attachmentNo = 0;
String store = null;
String filename = null;
String storageName = null;
try
docId = Integer.parseInt(request.getParameter("docId"));
revNo = Integer.parseInt(request.getParameter("revNo"));
attachmentNo = Integer.parseInt(request.getParameter("attachmentNo"));
store = request.getParameter("store");
filename = new String(request.getParameter("filename").getBytes("ISO-8859-1"),"UTF-8");
storageName = request.getParameter("storageName");
catch (NumberFormatException nfe)


if (docId >= 0 && revNo > -1 && attachmentNo >= 0)
String filePath = null;
filePath = ATTACHMENTSTOREPATH + File.separator + storageName;
filename = java.net.URLEncoder.encode(filename, "UTF-8")
.replace("+", "%20");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition","attachment;filename=" + filename);
BufferedOutputStream bos = null;
BufferedInputStream bis = null;
try
bos = new BufferedOutputStream(response.getOutputStream());
bis = new BufferedInputStream(new FileInputStream(filePath));
byte[] buffer = new byte[1024];
int n = -1;
while ((n = bis.read(buffer)) > -1)
bos.write(buffer, 0, n);

catch (Exception e)
e.printStackTrace();
finally
if (bis != null)
bis.close();
if (bos != null)
bos.close();
bis = null;
bos = null;


%>
我看了别人写的情况,基本上都是雷同。转载一个叫【古埃及法老】的代码。里面有一个什么:
CourseDetailBusiness.transfer(URLDecoder.decode(fileName,"GBK"),"GBK","ISO-8859-1");用意在转换字符集。
不知道这个方法实现了什么?
我改写的是:new String (java.net.URLDecoder.decode(fileName,"UTF-8").getBytes("UTF-8"),"ISO-8859-1");
但是失败了。求高人指教。

试试: response.setContentType( type + "; charset=GBK");
response.addHeader("Content-Disposition", "attachment; filename=" + new String(name.getBytes("GB2312"),"ISO-8859-1"));
参考技术A 你用Tomcat做JSP Container么?
如果是的话,请试着在 Server.xml <Connector 8080节点 添加URIEncoding="UTF-8"属性
还有就是浏览器 设置中设置充许以utf-8对地址栏编码。追问

都设置成UTF-8了,IE7+JBOSS+JSF,弹出框上面的文件名是正确的,就是直接点打开就乱码了。继续跟进。

参考技术B 打开名字乱码是正常,那是ie的临时文件名,保存不会就行追问

有道理,但是还想人性化一点,打开后有用户可能就直接保存的,如果文件名是乱码,总会有些遗憾,想优化一下。

MyEclipse9读取properties配置文件在jsp页面中显示乱码

我设置的是提示错误的信息,从properties的配置文件中提取的,但是在jsp的页面中现实的是乱码,我设置的编码方式是UTF-8,但是还是不行,我用MyEclipse9中带的properties File Editor 打开显示的是中文

出现乱码可能是是jsp页面配置的page 的charset不是utf-8,同时工程也需要设置为utf-8

你看看你的jsp页面上面的设置:如图

参考技术A 请检查一下几点:
1,你的project的编码是什么,右击项目名称->property->resource.建议utf-8编码。
2,检查jsp头部,编码是否一致,contont-type="utf-8"??
3, propertyd 的中文最好用asc2unicode.exe(java自带工具)进行utf-8处理。本回答被提问者采纳
参考技术B

工程中文件的编码格式一定要统一,就是说jsp页面、html页面、xml配置文件,甚至是java文件的编码格式都要统一。另外,整个工程和jsp页面的声明中也要使用同一种编码,这样才尽可能保证不出现乱码,你先检查一下这几个地方是不是都同一种编码格式。

以上是关于JSP页面下载文件,文件名乱码问题。的主要内容,如果未能解决你的问题,请参考以下文章

JSP中文乱码问题终极解决方案(下)

jsp页面显示中文为问号的问题(乱码问题)

Eclipse中新建jsp文件访问页面时乱码问题

为啥jsp使用URL传中文参数会乱码

MyEclipse9读取properties配置文件在jsp页面中显示乱码

在线等!关于jsp页面表单中文数据提交到后台出现乱码问题!