HttpServletRequest中文乱码

客户端访问服务器的页面时,填写相关信息并提交
————1————》
信息被封装到request对象中,封装时采用的是页面设置的编码格式,咱们通常设置的都是UTF-8
设置页面编码格式
  一、设置 HTML 页面编码格式为 UTF-8
  <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  二、设置 HTML 页面语言为中文
  <meta http-equiv="content-language" content="zh-CN" />
  三、设置 JSP 页面编码格式为 UTF-8
  <%@ page contentType="text/html;charset=UTF-8" %>
————2————》
服务器再解析出相关信息,默认采用的编码格式为ISO8859,因此就会出现乱码

能够看出问题就出如今服务器解析request对象中的信息采用的编码格式和以前的编码格式不一致形成的,因此咱们只要设置一下服务器解析request对象时的编码格式也为UTF-8便可。
request.setCharacterEncoding("UTF-8");
须要注意的是:
    此方法只对POST请求方式下的乱码问题有效。
 

那对于GET方式的乱码问题,须要咱们对“服务器在request对象解析出的乱码”再进行编码
一、服务器不是以ISO8859进行解析的嘛,假如:
String username = request.getParameter("username");
此时username中保存的数据对应的是ISO
8859编码库中的信息
二、咱们先找出username在此编码库中对应的信息:
username.getBytes("iso8859-1"); 
三、再以UTF-8的编码格式对其进行再解析:
username =  new String(username.getBytes("is08859-1"), "UTF-8");
四、这样此时的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编码
相关文章
相关标签/搜索