使用Tomcat4.1.34和jdk1.4.2
在Tomcat 4.1/webapps/examples/jsp/中加入submit.jsp
submit.jsp内容如下:
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ page pageEncoding="UTF-8"%>
<html>
<body>
<%=request.getParameter("streetname")%>
</body>
</html>
地址栏键入
http://localhost:8080/examples/jsp/submit.jsp?streetname=长安街
浏览器显示乱码。
我试着把UTF-8改为GB2312和GBK,错误依旧。
而且我换用不同版本的JDK和Tomcat使用,错误依旧。
请问该如何解决?
<%@ page language="java"contentType="text/html;charset=gb2312"%>应该不会出现乱码
"<%@ page contentType="text/html;charset=UTF-8"%>
<%@ page pageEncoding="UTF-8"%>"
改为:
<%@ page contentType="text/html;charset=gbk" %>
放在不同的浏览器里试
你在浏览器输入是采用本地字符集输入的,一般是中文gbk,而tomcat默认的情况下,对get请求是把参数通过iso-8859-1读取的,包括你设置了request.setCharacter("gbk")也是没用的,因为默认的情况下这样的设置只对post请求起作用而不对get起作用.
有3种办法可以解决:
1.<%=request.getParameter("streetname")%>改为<%=new String(request.getParameter("streetname").getBytes("iso-8859-1"),"gb2312")%>
这时先把读取到的string按iso编码还原,再到gb2312的字符集中去找,但是仍然按unicode码在内存中存储.这时输入就没问题了.
2.在catalina_Home/conf/server.xml的host的元素中设置URIEncoding="gb2312";这时将改变tomcat默认的读取get请求参数的方式,按gb2312读取
3.在catalina_Home/conf/server.xml的host的元素中设置useBodyEncodingForURI="true";这时对request.setCharacterEncoding()的设置会同样对get请求起作用,你在获取参数前加上一句,
request.setCharacterEncoding("gb2312")就可以了.
注意,同时设置2,3的时候,好象第2项设置将不再起作用
//转化一下
<%=request.getParameter("streetname")%>
String streetname=request.getParameter("streetname");
String streetname1=new String(streetname.getBytes("ISO-8859-1"),"GBK");
必须在传参数的时候对url进行java.net.URLEncode.encode()对url进行编码
在得参数的时候也必须对已经编码的url解码,用java.net.URLDecode.decode(String,"UTF-8").
这时候得到的参数才是正确的,参看www.baidu.com.cn输入中文查询,地址栏中的地址的格式。
参考这个:
http://community.youkuaiyun.com/Expert/topic/5238/5238411.xml?temp=.8588678
post和get不一样的.
有可能还需要在tomcat中进行设置.