java web url编码解码问题(下载中文名文件)

  问题描述:需要url直接访问中文名的文件,类似于在地址栏里直接输入http://localhost:8080/example/丽江旅游攻略.doc 来进行文件下载,tomcat的server.xml文件中connector的URIEncoding配置成utf-8时,没有问题,配置成gbk时,无法下载,url被解析成乱码,资源不存在。

  查阅大量资料,更深入的理解了url编码解码,分析原因是由于浏览器会默认使用utf-8对url包含的非英文字符进行编码,而tomcat中配置的是对url的解码方式,所以配置成utf-8时可以正常解析,但如果配置成gbk或者gb2312时就不行了,中文被utf-8编码,又用gbk去解码,肯定是乱码的。没有找到设置浏览器默认url编码方式的地方,我用了的是IE9,firefox 25.0,chrome 28,不知道别的浏览器或版本是不是也是都用utf-8,有人说这个方法应该和页面里声明的content-type,即<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>一致的,但我分析后应该不是这样的,因为如果你直接在地址栏里输入url,哪里来的页面?!

  解决方案:手动让前台编码和后台编码一致。其实简单点把tomcat的配成utf-8就可以了。如果非要用GBK或者其他的,可以手动先将包含非英文字符的url进行编码,然后再把编码后得到的url作为访问的url,java是提供了这样方法的。如下代码:

 System.out.println( java.net.URLEncoder.encode("丽江旅游攻略.doc",   "gbk")); 

   执行后输出%C0%F6%BD%AD%C2%C3%D3%CE%B9%A5%C2%D4.doc。

  这样就可以让a标签的href="http://localhost:8080/example/%C0%F6%BD%AD%C2%C3%D3%CE%B9%A5%C2%D4.doc"或者别的方式使用这个url。

posted @ 2013-12-01 16:36  ValiancyHe  阅读(2140)  评论(0编辑  收藏  举报