tomcat6中文乱码解决过程及测试
2015-06-10 00:00
676 查看
摘要: tomcat传输内容乱码和conf/server.xml设置的编码有关,Connector节点中2个属性URIEncoding和useBodyEncodingForURI
项目中URL参数中一直传的是英文或数字,突然有一天发现传中文,出现乱码现象;
resId的值实际传入的是中文:中国
从网上搜索,发现tomcat5以后,可以通过修改tomcat的conf/server.xml配置,能解决中文乱码问题;
默认conf/server.xml的节点配置如下
在此节点中,添加2个属性,可以设置内容编码:
URIEncoding
设置字符编码,如GBK、UTF-8、ISO-8859-1等
useBodyEncodingForURI
可以设置成true、false
设置成下面可以解决中文乱码问题
为了弄清楚这2个参数对中文的影响,做了一系列测试。
tomcat版本:apache-tomcat-6.0.35
代码中对HttpServletRequest请求设置了CharacterEncoding属性
下面是测试结果
在设置request.setCharacterEncoding("utf-8");时
在设置request.setCharacterEncoding("gbk");时,都是乱码
结论:
tomcat传输内容乱码和conf/server.xml设置的编码有关,Connector节点中2个属性URIEncoding和useBodyEncodingForURI;
1)tomcat这2个参数默认值
URIEncoding="ISO-8859-1" useBodyEncodingForURI="false"
2)要中文不乱码
必要条件,useBodyEncodingForURI="true",且代码中设置HttpServletRequest.request.setCharacterEncoding("utf-8")
项目中URL参数中一直传的是英文或数字,突然有一天发现传中文,出现乱码现象;
http://10.11.1.84:8080/test/index?resId=ä¸å½&resType=DISTRICT&result=xml
resId的值实际传入的是中文:中国
从网上搜索,发现tomcat5以后,可以通过修改tomcat的conf/server.xml配置,能解决中文乱码问题;
默认conf/server.xml的节点配置如下
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
在此节点中,添加2个属性,可以设置内容编码:
URIEncoding
设置字符编码,如GBK、UTF-8、ISO-8859-1等
useBodyEncodingForURI
可以设置成true、false
设置成下面可以解决中文乱码问题
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
为了弄清楚这2个参数对中文的影响,做了一系列测试。
tomcat版本:apache-tomcat-6.0.35
代码中对HttpServletRequest请求设置了CharacterEncoding属性
// HttpServletRequest request String url = request.getRequestURL() + "?" + request.getQueryString(); logger.info("request url=" + url); request.setCharacterEncoding("utf-8"); //request.setCharacterEncoding("gbk"); Map<String,String[]> map = request.getParameterMap(); Map<String,String> paramMap = new HashMap<String, String>(); for(String key:map.keySet()){ String[] values = map.get(key); paramMap.put(key, values[0]); } logger.info("source params: " + paramMap);
下面是测试结果
在设置request.setCharacterEncoding("utf-8");时
useBodyEncodingForURI="true" URIEncoding="UTF-8" 中文正常 URIEncoding="GBK" 中文正常 URIEncoding="ISO-8859-1" 中文正常 useBodyEncodingForURI="false" URIEncoding="UTF-8" 中文正常 URIEncoding="GBK" 中文乱码 URIEncoding="ISO-8859-1" 中文乱码,和最初乱码一样
在设置request.setCharacterEncoding("gbk");时,都是乱码
结论:
tomcat传输内容乱码和conf/server.xml设置的编码有关,Connector节点中2个属性URIEncoding和useBodyEncodingForURI;
1)tomcat这2个参数默认值
URIEncoding="ISO-8859-1" useBodyEncodingForURI="false"
2)要中文不乱码
必要条件,useBodyEncodingForURI="true",且代码中设置HttpServletRequest.request.setCharacterEncoding("utf-8")
相关文章推荐
- 设置让IntelliJ IDEA 忽略编译错误 继续启动 tomcat
- IntelliJ IDEA 热部署,修改java文件 不用重启tomcat
- tomcat 日志按日期产生,形如:project_log.2015-06-09.log
- tomcat局域网内发布html
- 以debug模式启动tomcat
- ant安装及配置编译;配置tomcat数据源和sql安装及配置
- Lvs + Ngnix + Haproxy + Keepalived + Tomcat 实现三种HA软负载均衡和Tomcat Session共享
- Tomcat调优总结
- Lvs + Ngnix + Haproxy + Keepalived + Tomcat 实现三种HA软负载均衡和Tomcat Session共享 分类: 系统架构 Linux 2015-06-09 21:50 168人阅读 评论(0) 收藏
- Spring+JMS+ActiveMQ+Tomcat实现消息服务
- javaEE异常摘要——更换工作区相同tomcat当部署在同一个项目疑难解答
- 整合apache和tomcat构建Web服务器
- 为什么web应用在tomcat启动时报java.lang.ClassCastException异常?
- linux安装tomcat
- 用cronolog为tomcat做日志分割
- Tomcat 系统架构与设计模式,第 1 部分: 工作原理
- Apache服务器和tomcat服务器有什么区别?
- centOs 开发环境,jdk,mysql,tomcat
- tomcat内部运行原理浅析
- Linux部署Tomcat服务器