问题描述:须要url直接访问中文名的文件,相似于在地址栏里直接输入http://localhost:8080/example/丽江旅游攻略.doc 来进行文件下载,tomcat的server.xml文件中connector的URIEncoding配置成utf-8时,没有问题,配置成gbk时,没法下载,url被解析成乱码,资源不存在。html
查阅大量资料,更深刻的理解了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,哪里来的页面?!java
解决方案:手动让前台编码和后台编码一致。其实简单点把tomcat的配成utf-8就能够了。若是非要用GBK或者其余的,能够手动先将包含非英文字符的url进行编码,而后再把编码后获得的url做为访问的url,java是提供了这样方法的。以下代码:chrome
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。tomcat