文件下载字符乱码完整解决方案【servlet+Tomcat】

来源:互联网 发布:盐与避难所 mac下载 编辑:程序博客网 时间:2024/04/30 13:45
如果发现文章中的图片无法显示请点击这里:http://tony-action.blog.sohu.com/17999319.html
前两天自己做了一个文件下载的小组件,做着玩,结果没想到遇到了乱码问题,网上有好多网友已经写出这种问题的解决方案,但是我觉得都不怎么详细,现在我将我的完整代码和运行结果拿出来和大家共同分享。
我的需求是:
1、用户的登陆验证,使用Hibernate框架连接MySql数据库
2、登陆成功进入下载页面,一个下拉列表显示中文名的mp3文件,点击下载按钮下载mp3文件件 
用户名和密码输入完后进入下载页面
此时当我选择一个文件后点击下载时,并不是我们所盼望的,而是这样的
大家都看到我的控制台已经打印出来正确的文件名而下载的时候文件名却是错误的大家肯定想看看我的代码这是我servlet的doGet方法
图上用红框圈的地方是因为服务器对浏览器传进来的参数名解码的时候解错了,大致是服务器不知道这个URL编码的源是什么码,所以它就把这个参数认为是UTF-8编码,并且对其进行解码(那肯定错了啊),我们就要对它(这个参数)进行正确的解码(具体细节查看JAVA API文档)将它解为GB2312编码,并且在控制台上打印这个文件名,打印的结果没有错误,可是在下载的时候为什么是乱码呢?我图上用双框选上的位置
这里出错了,那是因为服务器以这样的编码发送了文件名【Unicode->URL】
浏览器又是这样的解码【URL->UTF-8】所以我们下载的时候出现了乱码
具体的解决办法是这样的增加一行对GB2312->UTF-8->URL编码的工序(关于URLEncoder类的encode方法的具体使用参看JAVA API和我上图中的注视)
这样所有问题就解决了再来看一下我们的运行结果
呵呵,好了看看我的下载速度。。。
 
原创粉丝点击