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

java web url编码解码问题(下载中文名文件)的更多相关文章

  1. sed处理url编码解码=== web日志的url处理

    URL 编码/解码方法(linux  shell实现),方法如下: 1.编码的两种方法: admin@~ 11:14:29>echo '手机' | tr -d '\n' | xxd -plain ...

  2. cookie的中文乱码问题【URL编码解码】

    先搞明白为什么会乱码,为什么要转码: 在tomcat 8 之前,cookie中不能直接存储中文数据.需要将中文数据转码,一般采用URL编码(%E3).在tomcat 8 之后,cookie支持中文数据 ...

  3. Delphi中处理URL编码解码

    Delphi中处理URL编码解码 一.URL简单介绍     URL是网页的地址,比方 http://www.shanhaiMy.com. Web 浏览器通过 URL 从 web server请求页面 ...

  4. 007-TreeMap、Map和Bean互转、BeanUtils.copyProperties(A,B)拷贝、URL编码解码、字符串补齐,随机字母数字串

    一.转换 1.1.TreeMap 有序Map 无序有序转换 使用默认构造方法: public TreeMap(Map<? extends K, ? extends V> m) 1.2.Ma ...

  5. ASP.NET中Url编码解码

    今天遇到Url编码解码的问题,纠结了一天的时间,结果上网一查才发现太二了我们. 同事写的代码把url用HttpUtility.UrlEncode编码和解码了,本地测试没有问题,部署到服务器上就提示转码 ...

  6. 编码解码--url编码解码

    url编码解码,又叫百分号编码,是统一资源定位(URL)编码方式.URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通 ...

  7. WebApi中对请求参数和响应内容进行URL编码解码

    项目经测试,发现从IE提交的数据,汉字会变成乱码,实验了网上很多网友说的给ajax加上contentType:"application/x-www-form-urlencoded; char ...

  8. Python学习之==>URL编码解码&if __name__ == '__main__'

    一.URL编码解码 url的编码解码需要用到标准模块urllib中的parse方法 from urllib import parse url = 'http://www.baidu.com?query ...

  9. Django下载中文名文件:

    Django下载中文名文件: from django.utils.http import urlquote from django.http import HttpResponse content = ...

随机推荐

  1. 【Mybatis】 Mybatis在xml文件中处理大于号小于号的方法【问题】

    处理大于小于号的方法: https://www.cnblogs.com/winner-0715/p/6132755.html 第一种方法:用转义字符把">"和"&l ...

  2. RecyclerView的万能切割线

    效果图: 用法: 加入默认切割线:高度为2px.颜色为灰色 mRecyclerView.addItemDecoration(new RecycleViewDivider(mContext, Linea ...

  3. Allegro改动shape网络节点

    使用Allegro时改动shape的网络节点方法: ①选择shape->Select Shape or Void/Cavity ②选择要改动的shape ③点击(...)改动网络节点的名字 ④改 ...

  4. saltstack源码安装

    环境 centos6.3,python2.7.5. 1.install libzmq-master $ git clone git://github.com/zeromq/libzmq.git $ c ...

  5. openwrt 编译 gmediarender

    output_gstreamer.o: In function `my_bus_callback': output_gstreamer.c:(.text+0xf68): undefined refer ...

  6. gcc编译minigui新程序报错

    !ggcc *.c  -ljpeg -lpng  -lminigui -lpthread/usr/local/lib/libminigui.so: undefined reference to `dl ...

  7. vue 开发前准备工作

    工欲善其事,必先利其器. 第一步,选择一个合适的编辑器: 看vue官网上,有推荐用HBuilder X这个编辑器,这个我在开发微信小程序的时候,就是用的这个编辑器,还可以,挺好用的,也可以用git做版 ...

  8. bzoj 1088 简单dfs

    /* 题意:给你一列仅仅能取0和1的数. 限制:每3个相邻的数的值固定,开头和结尾仅仅限制两个数 求:有多少种组合方案 解:搜索,在开头和结尾再加一个仅仅能取零的数,直接推断是否符合条件就可以 */ ...

  9. 项目Alpha冲刺(团队9/10)

    项目Alpha冲刺(团队9/10) 团队名称: 云打印 作业要求: 项目Alpha冲刺(团队) 作业目标: 完成项目Alpha版本 团队队员 队员学号 队员姓名 个人博客地址 备注 221600412 ...

  10. peewee模块

    Peewee Python中数据库与ORM主要做这几件事: 数据库方面由程序员设计表关系,主要是1v1,1vN,NvN: ORM做数据类型映射,将数据库表示的char/int等类型映射成Python对 ...