JSP参数传递中文乱码

登陆界面输入用户名密码,我通过servlet接收到,并设置gb2312,接收到的中文正常,但我再把这个参数放到cookie或session中,传到里一个页面,并通过request,得到为什么出现乱码

第1个回答  2010-07-10
总结:1. 在jsp中<%@ page contentType="text/html; charset=A" %>如果指定了,那么在改jsp中所有构造的String(不是引用),如果没有指定编码,那么这些String的编码是A的。从request的得到的String如果没有指定request的编码的话,他是iso-8859-1的从别的地方得到的String是使用原来初始的编码的,比如从数据库得到String,如果数据库的编码是B,那么该String的编码是B而不是A的,也不是系统默认的。此时,如果要输出的String的编码不是A,那么,很可能显示乱码的,所以首先要将String正确转化为编码A的String,然后输出。2. 在jsp中<%@ page contentType="text/html; charset=A" %>没有指定,那么相当于指定了<%@ page contentType="text/html; charset=ISO-8859-1" %>3. Servelte中如果执行了像 response.setContentType("text/html;charset=A");说明将response的字符输出流编码设置为A,所有要输出的String的编码要转化为A的,否则会得到乱码的。Servelet中从request得到的String的编码和jsp中一样的,但是在servlet java文件中构造的String是使用的系统默认的编码的。在servelt中从外部得到的String 是使用原来的编码的,比如从编码为B的数据库得到的数据是编码为B的,不是A,也不是系统默认的编码。

参考资料:http://www.cniter.com/tech/jsp/10142_1.html

第2个回答  2010-07-10
编码:session.setAttribute("someAttr", java.url.Encoder.encode("字符串", "gb2312");

解码:java.url.Decoder.decode(session.getAttribute("someAttr"), "gb2312);
第3个回答  推荐于2016-07-13
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
把你页面的字符编码改成gb2312,如上。
或者 把你通过request获得的用户名 假如叫username,进行解码:
String username= request.getParameter("username");

String username1 =new String(username.getBytes("ISO8859_1"),"gb2312");本回答被提问者采纳
相似回答