论坛首页 Java企业应用论坛

中文文件名附件下载引至的疑问...

浏览 9446 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-07-18  
最近做附件下载功能,当然少不了遇到中文乱码的问题。

在get方式传递文件名(带中文的)
现时唯一通过的方法是:
1.在链接中用java.net.URLEncoder.encode对文件名进行编码
2.在JSP或servlet中进行转码(ISO->UTF)
3.在设定response的Header时,要去文件名进行编码(UTF->ISO)

但这方法必须在JSP中写encode的代码,对于用标签做JSP页面时,极不方便。

而另一种似乎可行的方式,却有不解问题,情况如下:
链接页面
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page language="java" pageEncoding="UTF-8"%>
<a href="download.jsp?file_name=测试标.jgp">下载链接</a>

下载页面
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page language="java" pageEncoding="UTF-8"%>
<%
out.println("file_name==" + new String(res.getBytes("ISO-8859-1");,"UTF-8"); + "<br>");;
//...省略部分代码
%>

当我在下载页面接收参数file_name时,做转码后发现,中文文件名为偶数时没有问题,为奇数时,最后一个字变成了问号。

请问大家可有遇过这问题?如何解决的?请不惜指教,TKS!
   发表时间:2006-07-18  
知道tomcat可以设置urlEncode="UTF-8",不知道搂主用的什么服务器,应该可以设置的。
0 请登录后投票
   发表时间:2006-07-18  
LuckyFox 写道
知道tomcat可以设置urlEncode="UTF-8",不知道搂主用的什么服务器,应该可以设置的。


感谢你的回复!

我用的就是TOMCAT,你说的参数名应该是URIEncoding,我设过UTF-8和GBK但仍然是有这个问题。

不知我是否还有什么遗漏的地方。
0 请登录后投票
   发表时间:2006-07-19  
继续等待正确答案
0 请登录后投票
   发表时间:2006-07-19  
附件下载
response.setContentType("application/octet-stream; CHARSET=utf8");
文件名的设置
response.setHeader("Content-Disposition","attachment; filename="+URLEncoder.encode(fileName,"UTF-8"));
0 请登录后投票
   发表时间:2006-07-19  
ylt 写道
附件下载
response.setContentType("application/octet-stream; CHARSET=utf8");
文件名的设置
response.setHeader("Content-Disposition","attachment; filename="+URLEncoder.encode(fileName,"UTF-8"));


谢谢你的回复,我的设定是:
response.setContentType("application/x-msdownload");
response.addHeader("Content-Disposition", "attachment; filename=\""+ new String(attch_name.getBytes("GBK"),"ISO-8859-1") + "\"");

测试也通过。
不知你说的application/octet-stream和我设的application/x-msdownload有没有什么不同。URLEncoder.encode(fileName,"UTF-8")可以理解。

另我的疑问还没到这步,问题是为什么我传过去的中文文件名,一获得时就有奇数乱码问题?
有谁有空帮我按上面提出的JSP代码试一下吗
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics