HttpServletRequest中文乱码
————1————》
信息被封装到request对象中,封装时采用的是页面设置的编码格式,我们一般设置的都是UTF-8
设置页面编码格式
1、设置 HTML 页面编码格式为 UTF-8
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
2、设置 HTML 页面编码格式为中文
<meta http-equiv="content-language" content="zh-CN" />
3、设置 JSP 页面编码格式为 UTF-8
<%@ page contentType="text/html;charset=UTF-8" %>
————2————》
服务器再解析出相关信息,默认采用的编码格式为ISO8859,所以就会出现乱码
可以看出问题就出现在服务器解析request对象中的信息采用的编码格式和之前的编码格式不一致造成的,所以我们只要设置一下服务器解析request对象时的编码格式也为UTF-8即可。
request.setCharacterEncoding("UTF-8");
需要注意的是:
此方法只对POST请求方式下的乱码问题有效。
那对于GET方式的乱码问题,需要我们对“服务器在request对象解析出的乱码”再进行编码:
1、服务器不是以ISO8859进行解析的嘛,假如:
String username = request.getParameter("username");
此时username中保存的数据对应的是ISO 8859编码库中的信息
2、我们先找出username在此编码库中对应的信息:
username.getBytes("iso8859-1");
3、再以UTF-8的编码格式对其进行再解析:
username = new String(username.getBytes("is08859-1"), "UTF-8");
4、这样此时的username中保存的数据就是以UTF-8编码的了,就不会出现乱码问题了
同样,在超链接地址后
<a href="/locationURL?username=中国">超链接</a>
所带的中文信息,也要以GET方式对应的方法来解决。
username = new String(username.getBytes("is08859-1"), "UTF-8");
我们可以通过修改服务器的配置信息,来统一解决乱码,不论是哪种方式的请求,都可以搞的定,但是开发过程最好不要使用这种方式。
以Tomcat为例,我们可以修改conf目录下的server.xml文件:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />可以为Connector增加相关属性:
URIEncoding="UTF-8" 设置服务器的编码格式
对于刚开始所说的
request.setCharacterEncoding("UTF-8");
只对POST方式有效,GET无效的问题,我们可以为Connector增加以下属性:
useBodyEncodingForURI="true" 就可以使GET方式下也使用UTF-8编码
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。