情景再现:
前段时间做个查询,查询条件在前端页面中是正常的汉字,在js中alert()出来也是正常的。但是传到后台汉字乱码了。。
当时不知道是什么原因导致的,
因为jsp页面加了编码:pageEncoding <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
后来我觉得可能是url加密了url encoding了,然后我在后台将接收的乱码字符串decoding反编码,但是还是乱码!!
给我烦的一个头两个大,后来病急乱投医:
BalanceErrorLogParam param;
String str1 = JSON.toJSONString(param);
String newStr = new String(str1.getBytes("ISO-8859-1"), "UTF-8");
BalanceErrorLogParam param1 = JSON.parseObject(newStr, BalanceErrorLogParam.class);
将接收到的实体重新编码,把认识的编码格式挨个试了一遍,发现iso-8859-1
格式是对的,然后本地就这么个蠢方法放这了。
项目发布到服务器上,测试妹子说,这个查询查不出来啊,我想肯定乱码了,,
本地和服务器上版本都是tomcat7,只是tomcat的配置不同,缩小了范围就好办了,比对两个server.xml
最终解决办法:
利用request.setCharacterEncoding("UTF-8");
来设置Tomcat接收请求的编码格式,只对POST方式提交的数据有效,对GET方式提交的数据无效!
要设置GET的编码,可以修改server.xml文件中,
相应的端口的Connector的属性:URIEncoding="UTF-8"
,
这样,GET方式提交的数据才会被正确解码。
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
这也让我知道了,tomcat7不配置URIEncoding
,它的默认值是ISO-8859-1
。
网友评论