JSP参数传递中文乱码

2025-04-05 10:22:33
推荐回答(3个)
回答1:

总结: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,也不是系统默认的编码。

回答2:

编码:session.setAttribute("someAttr", java.url.Encoder.encode("字符串", "gb2312");

解码:java.url.Decoder.decode(session.getAttribute("someAttr"), "gb2312);

回答3:


把你页面的字符编码改成gb2312,如上。
或者 把你通过request获得的用户名 假如叫username,进行解码:
String username= request.getParameter("username");

String username1 =new String(username.getBytes("ISO8859_1"),"gb2312");