jsp页面中文乱码的解决情况
首先注意在页面标签中声明好编码格式
<%@ pagecontentType="text/html;charset=utf-8"pageEncoding="UTF-8"%>
一般来说,客户端向服务器端传递数据都是通过request(要注意这个request的生命周期,下一次请求意味着另一个request,需要再次设置),可以为这个request设置一下编码格式request.setCharacterEncoding("UTF-8");
注意:P1->P2->P3需要在p2和p3中都设置一遍
但
request.setCharacterEncoding("UTF-8");
<jsp:forwardpage="p2.jsp">
<jsp:paramname="userName"value="瑞莎"/> </jsp:forward>
(Loop after forward)
则有些不同 ,需要在p1中的request设置utf-8,这点不是很理解,难道是和forward的特性有关,
上面三页面传值出现了三次请求,而如果使用forward的话,只会出现一次请求,同时代码的执行顺序是从forward进去,(Loop afterforward)这些代码都不会执行了。同时请求仍然是一个。
String username2 =newString(username.getBytes("ISO8859_1"),"UTF-8");
setCharacterEncoding不起作用?
setCharacterEncoding只针对post 而get还是使用的tomcat配置的默认编码方式
解决的方法有三个:
1. 将GET请求改成POST请求,然后就可以使用request.setCharacterEncoding方法设置编码,并使用request.getParameter方法直接获得中文请求参数了。
2. 不用改GET请求,在Servlet中使用如下的代码来得到中文请求参数。
String name = newString(request.getParameter("name").getBytes("ISO-8859-1"),"GBK"); (ISO-8859-1是tomcat的默认编码,如果做过修改,这里也要相应的修改)
3.为了保证get数据采用UTF8编码,在server.xml中进行了如下设置
<connector port="8080"maxthreads="150" minsparethreads="25"<br="">maxSpareThreads="75"enableLookups="false" redirectPort="8443"
acceptCount="100"debug="99" connectionTimeout="20000"
disableUploadTimeout="true"
URIEncoding="UTF-8"/>
Ps: 如果是使用myeclipse的自带的tomcat,则它的配置路径是X:\Workspace\.metadata\.me_tcat\conf