文件下载,文件名乱码

zhonghua_399 2005-06-29 02:23:08
功能:文件下载:

代码部分如下:

String strFileName = "测试.txt";
m_response.setHeader("Content-Disposition", "attachment; filename="+strFileName);
当访问这个servlet时:提示是否保存文件,
1、点击保存,文件名乱码;
2、点击打开,文件正常打开,不过文件的标题也是乱码;

如果这样:
String strFileName = toUtf8String("测试.txt");
m_response.setHeader("Content-Disposition", "attachment; filename="+strFileName);
public static String toUtf8String(String s) {
StringBuffer sb = new StringBuffer();
for (int i=0;i<s.length();i++) {
char c = s.charAt(i);
if (c >= 0 && c <= 255) {
sb.append(c);
} else {
byte[] b;
try {
b = c.toString().getBytes("utf-8");
} catch (Exception ex) {
System.out.println(ex);
b = new byte[0];
}
for (int j = 0; j < b.length; j++) {
int k = b[j];
if (k < 0) k += 256;
sb.append("%" + Integer.toHexString(k).
toUpperCase());
}
}
}
return sb.toString();
}

当访问这个servlet时:提示是否保存文件,
1、点击保存,文件名正常;
2、点击打开,文件正常打开,不过文件的标题是类似"%B%%%"的样子

请高手解答,怎么样才能使保存和打开文件名都不乱
...全文
926 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhonghua_399 2005-06-30
  • 打赏
  • 举报
回复
ms6309a(ak47ms6309a) 我佩服你的RP
zhonghua_399 2005-06-30
  • 打赏
  • 举报
回复
singinthesky(ichoose),你说的用substring之类的来修正我实现不了.因为那个[1]是在response.setHeader("Content-Disposition","attachment;filename="+fileName);之后在页面上的时候出现的.麻烦你试一下你的程序看看吧?能不能解决?
ms6309a 2005-06-30
  • 打赏
  • 举报
回复
to:singinthesky(ichoose)。。。行了老兄。。。什么好用的东西到他那儿也不好使了。。也不知道他是怎么整的!!
zhonghua_399 2005-06-30
  • 打赏
  • 举报
回复
OK!谢谢两位了
singinthesky 2005-06-30
  • 打赏
  • 举报
回复
呵呵,那你就用substring之类的来修正它啦,可以专门写一个公共方法。我这里没出现这情况哦。
zhonghua_399 2005-06-30
  • 打赏
  • 举报
回复
请问singinthesky(ichoose) 我用的方法:
1,如果是自己写servlet下载的话,
response.setContentType("application/octet-stream");
byte[] b=fileName.getBytes("GBK");
fileName=new String(b,"8859_1");
response.setHeader("Content-Disposition","attachment;filename="+fileName);
乱码解决了,可是当文件名中有"."的时候,打开下载时文件名里在.之前总是有一个[1]这个问题怎么解决啊?

ms6309a 2005-06-30
  • 打赏
  • 举报
回复
不会吧。。。我的都是正常的。。。。
singinthesky 2005-06-30
  • 打赏
  • 举报
回复
晕,为了不浪费csdn的资源啊,而且其他代码都很简单的,不会也要帖出来吧
ms6309a 2005-06-30
  • 打赏
  • 举报
回复
to:singinthesky(ichoose)。。。。你就不能给人家一个全的吗?
好人做到底吗!!!
zhonghua_399 2005-06-30
  • 打赏
  • 举报
回复
ms6309a(ak47ms6309a) 你好,你给我的东东和我的一样,没有解决打开文件时的乱码问题!
ms6309a 2005-06-30
  • 打赏
  • 举报
回复
行是不行呀。楼主给话呀?!
singinthesky 2005-06-30
  • 打赏
  • 举报
回复
我以前被这个问题搞了好久,现在分享一下哈。
1,如果是自己写servlet下载的话,
response.setContentType("application/octet-stream");
byte[] b=fileName.getBytes("GBK");
fileName=new String(b,"8859_1");
response.setHeader("Content-Disposition","attachment;filename="+fileName);
2,用oreilly的cos.jar组件。
String contentType = request.getSession().getServletContext().getMimeType(fileName);
ServletOutputStream sos=null;

if (contentType != null) {
response.setContentType(contentType);
} else {
response.setContentType("application/octet-stream");
}

try {
sos=response.getOutputStream();
response.setHeader("Content-Disposition", "attachment; filename=\"" + new String(fileName.getBytes("gb2312"), "iso8859-1") + "\"");
ServletUtils.returnFile(downPath, sos);
}catch(Exception e){
...
}finally{
......
}

补充一点:用了好多开源上传下载组件,发现基本上每个都不尽如人意,普遍的一个问题是在多用户并发上传文件时,过一段时间(可能是几小时,可能是几天)之后,容器就会死掉,表现为系统不能再登陆,但是死掉的时候服务器占用资源(包括内存和cpu)又不是很大,估计是系统已经不能再分配资源了。而把这些上传下载功能屏蔽掉系统就无事。看来
ms6309a 2005-06-30
  • 打赏
  • 举报
回复
我的QQ:69632928

我们可以相户学习。。。
ms6309a 2005-06-30
  • 打赏
  • 举报
回复
发完了。。
zhonghua_399 2005-06-30
  • 打赏
  • 举报
回复
zhonghua_8888@163.com
如果问题能解决分不是问题.先谢谢了!
大河V5 2005-06-30
  • 打赏
  • 举报
回复
关注一下,我也有这个问题
ms6309a 2005-06-30
  • 打赏
  • 举报
回复
分太少了。。。100分就给你一个现成的。。。。邮箱给我。。。
singinthesky 2005-06-30
  • 打赏
  • 举报
回复
这个[1]是操作系统自己加上去的,如果文件名带有2个或者2个以上的“.”的话,就会自动在第一个“.”前加上“[1]”。目前还没想到解决办法,因为以前也没考虑过会出现这种情况。或者变通一下,将其他“.”用下划线“_”替代?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧