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"); 打印出中文就正常了,没有乱码
这个文件名如果直接作为下载名还是不行的,下载文件时候还是乱码
如果我这边
new String(fileName.getBytes("GBK"),"ISO8859_1")
转发失败!!我做了N次调试,都被这个空格给坑了。。一直没发现就是它的问题,然后我把空格replaceAll一下 ,随便replaceall一个就好了 要么直接去掉空格,要么替换为下划线 就下载正常咯。。。。
各位程序员你们有遇到过这个问题吗?如果你们有,采用我上面的方法应该可以解决你的难题了!望各位赐教,谢谢
?
?
?
?