问题描述:需要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。

最新文章

  1. php 全局变量
  2. 创建 floating IP - 每天5分钟玩转 OpenStack(106)
  3. Windows 服务开发框架介绍 - Topshelf
  4. jpush极光推送知识点总结
  5. C# csv 操作类
  6. 2012 East Central Regional Contest 解题报告
  7. 【转】Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
  8. 【转】第一个Linux内核驱动程序
  9. php的curl获取https加密协议请求返回json数据进行信息获取
  10. in window js 未定义和undifined的区别
  11. 在 .NET 4 中使用托管可扩展性框架构建可组合的应用程序
  12. 新鲜出炉的less与sass较量
  13. python实战第一天-socket模块练习
  14. Jmeter Thread Group中如果存在HTTP request执行失败,就对整个Thread Group重新执行,限定最大执行次数N次
  15. Linux基础命令---文本格式转换expand,unexpand
  16. 图像处理基础---RGB图 灰度图 索引图 调色板
  17. Filter查询
  18. Bitlocker驱动器加密使用
  19. docker教程——docker镜像打包上传
  20. C#编程(二十二)----------继承的类型

热门文章

  1. js上传文件研究
  2. OD调试器调试Delphi程序按钮事件断点方法
  3. POJ训练计划1035_Spell checker(串处理/暴力)
  4. Linux CentOS下安装、配置mysql数据库
  5. 李洪强经典面试案例33-如何面试 iOS 工程师
  6. MySQL中给自定义的字段查询结果添加排名的方法
  7. Arcgis Engine(ae)接口详解(5):IGeometry几何基础操作
  8. 最长公共字序列.cpp
  9. 小心APP应用让你成为“透明人”
  10. Unity自己主动打包工具