码迷,mamicode.com
首页 > Web开发 > 详细

HttpServletRequest中文乱码

时间:2015-03-13 12:49:49      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

客户端访问服务器的页面时,填写相关信息并提交
————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编码
  

HttpServletRequest中文乱码

标签:

原文地址:http://my.oschina.net/lhplj/blog/386558

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!