`
successfulroof
  • 浏览: 73045 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 下载 中文名 乱码 问题 和解决方案

阅读更多

最近在做下载文件方面的程序,一路坎坷!各种乱码~虽然我加了字符过滤器但是毫无作用!

特别是在下载中文文件名很有问题。

乱码很多情况下都是由于整个软件的编码不统一而导致的,如:页面采用GBK或者GB2312的方法,而java 后台代码采用UTF-8 这样很可能就会导致乱码问题的存在。我在实际中也遇到过了

 

一般我们解决乱码的方法可以分几种:

1.配置过滤器

   配置过滤器总的来说还是可行的,但是当我以GET方式来传递参数为中文的时候总是有些问题

2.javascript 的 encodeURIComponent 方法

   encodeURIComponent的方法可以有效的解决中文乱码问题 encodeURIComponent 能够将中文 用十六进制的转义序列进行替换,然后在后台使用java里面的UrlDecoder里面的decode方法来解码

第二种方法问题也是有的,有时候不知道为什么 解码不正确,不得不对中文进行两次encodeURIComponent 然后在java里面使用decode 来decode一次(有人说request取出中文来的时候已经decode了一次),而实际中我编码了两次,然后decode两次才有用。这个也不是很靠谱

以上是基本乱码解决方法

 

当遇到web下载时候,我们要给这个下载的文件一个文件名,这样很可能就会导致文件无法下载或下载乱码

 

解决办法 :

  String fileName = request.getParameter("fileName");

获得传过来的文件名 这里在页面我没有使用 encodeURIComponent 编码 ,我的java代码采用utf-8的编码,无疑,我获得的fileName是乱码的;

然后我使用 fileName = new String(fileName.getBytes("ISO8859_1"),"UTF-8"); 打印出中文就正常了,没有乱码

这个文件名如果直接作为下载名还是不行的,下载文件时候还是乱码

如果我这边

response.setContentType( "application/x-octetstream;charset=ISO8859_1"); 

 这是设置下载内容编码 然后:

response.setHeader("Content-Disposition", "attachment;fileName="+ new String(fileName.getBytes("GBK"),"ISO8859_1"));

 按理说这样子即可解决中文乱码问题,不过你要确保在fileName 使用

new String(fileName.getBytes("GBK"),"ISO8859_1")

之前 fileName在java里面可以正常打印,也就是打印出来不是乱码。

好了,这样看起来确实没有问题。难道所有中文文件都可以下载了吗?

答案是否定的(我这边有部分有问题,不知道大侠可否有)

也就是当我的 文件名中间如果含有 “空格”,注意 这个“空格”对下载有很大的影响,他很有可能就导致了

new String(fileName.getBytes("GBK"),"ISO8859_1")

转发失败!!我做了N次调试,都被这个空格给坑了。。一直没发现就是它的问题,然后我把空格replaceAll一下 ,随便replaceall一个就好了 要么直接去掉空格,要么替换为下划线 就下载正常咯。。。。

各位程序员你们有遇到过这个问题吗?如果你们有,采用我上面的方法应该可以解决你的难题了!望各位赐教,谢谢

 

 

 

 

分享到:
评论
1 楼 gc715409742 2012-09-29  
楼主分析的很详细, mark;

"操蛋的民工" 博客名不敢苟同。

相关推荐

    下载中文名称出现乱麻解决方案

    在我们做java web程序下载时 如果下载的是中文名就会出现乱麻 这个问题困扰了很多人 现在这个文档就写了对应的解决方案 非常有用的。希望对你们也有帮助

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...

    asp.net知识库

    常见的 ASP.NET 2.0 转换问题和解决方案 Asp.Net2.0无刷新客户端回调 体验.net 2.0 的优雅(1) -- 异步WebService调用 ASP.NET 2.0页面框架的几点新功能 ASP.NET 2.0 中收集的小功能点 asp.net2.0中的webpart使用...

    易语言程序免安装版下载

    OpenGL支持库中的部分英文名称常量已改为中文,并统一在所有常量名称之前加前缀“GL_”,以减少与其它库的冲突机率。 3. 互联网支持库中的“FTP目录列表”命令返回的文件时间改为FTP服务器返回的原始时间,不做...

    ssh(structs,spring,hibernate)框架中的上传下载

     以上是Spring+Hibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单中file类型的组件映射为ActionForm中类型为org.apache.struts.upload. FormFile的属性来获取表单提交的文件数据。  工程...

    HttpClient以及获取页面内容应用

    8. 便携可靠的套接字工厂使它更容易的使用第三方解决方案。 9. 连接管理器支持多线程应用。支持设置最大连接数,同时支持设置每个主机的最大连接数,发现并关闭过期的连接。 10. 自动处理Set-Cookie中的Cookie。 11....

Global site tag (gtag.js) - Google Analytics