锁定老帖子 主题:如何下载中文文件
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2003-12-09
1 将中文字符转化为iso-8859-1,无需编码,我看Hotmail就是这么做的。这个办法最简单,但是因为我的系统是多语言版本,很难准确地转换到iso-8859-1字符集。 2 使用URLEncoder.encode中文字符,字符集采用UTF-8。具体可以参考一篇文章《jspSmartUpload上传下载全攻略》所提出的解决方法http://tech.ccidnet.com/pub/article/c1112_a62023_p1.html。这个方法有一些小问题,一个是Mozilla不支持(这个倒是其次,不支持也罢),再一个就是中文字符如果过多(超过20个以上)IE下载会有问题。 3 使用Javamail的MimeUtility.encode方法来编码中文字符。这个方法是我最倾向使用的,毕竟是MIME标准。Mozilla是支持这个方法,但是IE又不支持(天杀的IE,连标准也不遵守)。 大家说说有没有什么好的方法可以解决下载中文文件出现的问题。 我的要求主要有两个:一个是IE运行没问题;二是必须支持Unicode(不单单是中文)。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2003-12-09
没有完全看明白你说的话。
如果只做下载的话可以完全交给 Http Server(Apache、Jetty、IIS,etc.)来做。流量控制也可以通过配置 Http Server 来实现。这样与浏览器就没有任何关系了。下载的文件内容不会有任何变化,我们从来没有遇到过你说的复杂情况。 唯一一个需要注意的是中文文件名。W3C 并未规定 URL 中的字符如何编码,所以不同的浏览器实现不同。在 IE 中可以这样设置“工具->Internet选项->高级->浏览->始终以 UTF-8 发送 URL”,这样下载中文文件名的文件就不会有问题了。 |
|
返回顶楼 | |
发表时间:2003-12-10
我的意思就是说是中文名的文件下载如何设置其HTTP头。也就是如何设置Content-Disposition的filename参数。这个文件名是动态生成的。浏览器根本不知道是什么文件名。
|
|
返回顶楼 | |
发表时间:2003-12-11
crofton 写道 我的意思就是说是中文名的文件下载如何设置其HTTP头。也就是如何设置Content-Disposition的filename参数。这个文件名是动态生成的。浏览器根本不知道是什么文件名。
为什么一定要由 Java 程序来设置呢?交给 HTTP Server 来做不好吗?至少我们使用 IE 下载有中文文件名的文件从来没有出过问题。 是不是想得过于复杂了?呵呵。Show 一段你们的代码,我们肯定能找到答案的。 |
|
返回顶楼 | |
发表时间:2003-12-11
请问Dlee,HTTP server怎么设置filename?
thanks |
|
返回顶楼 | |
发表时间:2003-12-11
jd2bs 写道 请问Dlee,HTTP server怎么设置filename?
直接放在 URL 里就可以了。 http://www.xxx.com/oa/file/10551296/63/同步记录.txt 这样做剩下的一个问题是安全性不好,如果不对 HTTP Server 设置访问某个目录下文件的权限,则任何人都可以下载该目录的文件。所以有必要使用专门的下载程序控制下载。crofton 说的就是这种情况。但是如果这种情况是一个问题,肯定早就有人解决过了。最简单的解决方法就是直接到 Google 去找答案。 我上次说错了,在 IE 中,应该把“始终以 UTF-8 发送 URL”选项去掉才能支持中文的文件名。我使用的是 IE5,可能高版本已经没有这个限制了。 |
|
返回顶楼 | |
发表时间:2003-12-11
Google上早就搜索过了,所以才总结以上三种解决方法。但关键是这些解决方法都有一些问题。如果找不到什么比较好的方法,那暂时只好使用第二种方法。
再问一个中文文件名的问题:就是使用java.util.zip来生成一个压缩文件,如果含有中文文件名的文件,使用Winzip之类的压缩工具打开会乱码,使用jar来解压缩没这个问题。经查看源代码,发现java.util.zip总是以UTF-8来编码文件名。对于这种有什么办法可以解决么? |
|
返回顶楼 | |
发表时间:2003-12-11
dlee 写道 crofton 写道 我的意思就是说是中文名的文件下载如何设置其HTTP头。也就是如何设置Content-Disposition的filename参数。这个文件名是动态生成的。浏览器根本不知道是什么文件名。
为什么一定要由 Java 程序来设置呢?交给 HTTP Server 来做不好吗?至少我们使用 IE 下载有中文文件名的文件从来没有出过问题。 是不是想得过于复杂了?呵呵。Show 一段你们的代码,我们肯定能找到答案的。 其实动态生成HTTP头是很常见的,比如webmail系统中下载附件这种情况。代码也很简单(我尽量简化了): response.setContentType("application/x-msdownload");; response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");; OutputStream out = response.getOutputStream();; StreamUtility.copy(in, out);; out.close();; in.close();; |
|
返回顶楼 | |
发表时间:2003-12-11
别急,你先调用:
response.setCharacterEncoding("gbk"); 或者: response.setCharacterEncoding("gb2312") ; 试一下。 |
|
返回顶楼 | |
发表时间:2003-12-11
dlee 写道 别急,你先调用:
response.setCharacterEncoding("gbk"); 或者: response.setCharacterEncoding("gb2312") ; 试一下。 这个方法是Servlet 2.4才加上的,现在我只能Servlet 2.3,所以也就不想测试了。 |
|
返回顶楼 | |