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编码
  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。