最近写一些东西,使用超链接在地址栏里传入中文后,遇见了一些乱码问题,查了一些资料,做一些总结。
一、Get提交方式产生的乱码
原因:浏览器首先会将这些中文字符进行编码然后再发送给服务器,地址栏中所输入的URL包含中文字符时,浏览器会将它们转 换为 application/x-www-form-urlencoded MIME 字符串,即一堆%xx%xx的字符串。
解决方法:
①js或超链接等向地址栏中传入中文时,使用如下方式,将你需要传入的参数封装一下
//把hh换成你要转换的字符串对象,编码类型填你需要转换的类型,需要和后面解码时候的编码类型一致
<% URLEncoder.encode(hh,"utf-8") %>
后台解码
//此处注意解码时候和编码时候设定的字符集保持一致
String hh = request.getParameter("hh");
hh = URLDecoder.decode(hh,"utf-8");
②修改tomcat的server.xml中的配置(最推荐的做法)
找到tomcat的安装目录---conf---server.xml
找到如下两个Connector标签
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" />
。。。
。。。
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
将之改为如下,即在后面加上指定的编码
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
。。。。
。。。。
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
③使用高版本的Tomcat,解决了Get请求的中文乱码问题,亲测Tomcat7.xxx的没有解决,应该8之后有这个优化。
二、Post提交方式的中文乱码
这种乱码解决方式很常见,就不多说了,直接一行代码,解决方式如下,推荐在后端代码的首行就加上,算是一个好习惯。
//在接收前台传入的参数之前,加入下面一行代码指定字符编码
request.setCharacterEncoding("utf-8");