我有两个JSP文件,以下是login.jsp的源代码
<%@page contentType="text/html; charset=GB2312"%>
<%-- charset如果用UTF-8表单提交的数据就转ISO-8859-1码不正确 --%>
<%@page pageEncoding="GB2312"%>
<%-- pageEncoding也可以用UTF-8(好像表单提交是从UTF-8转到ISO-8859-1可以) --%>
<script>
function toServer(){
var xml = "<root>"+
"<name>"+document.all('name').value+"</name>"+
"<pwd>"+document.all('pwd').value+"</pwd>"+
"</root>";
//
//var XMLSender = new ActiveXObject("Microsoft.XMLHTTP");
var XMLSender = new ActiveXObject("Msxml2.XMLHTTP");
XMLSender.Open("POST",'do_login.jsp',false);
/*XMLSender.setRequestHeader("Content-Type","text/xml");
XMLSender.setRequestHeader("Content-Type","utf-8"); */
//XMLSender.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//XMLSender.setRequestHeader("Content-Length",xml.length);
XMLSender.send((xml));
alert(XMLSender.responseText);
}
</script>
name:<input type="text" id="name" /><br>
passwd:<input type="text" id="pwd" /><br>
<input type="button" value="hello" οnclick="toServer()">
<form action="do_login.jsp">
<input type="text" name="test" value="">
<input type="submit" value="提交">
</form>
以下是do_login.jsp的源代码
<%@page contentType="text/html; charset=GB2312"%>
<%@page pageEncoding="GB2312"%>
<%
String name = request.getParameter("test");
System.out.println("/r/n2. 表单提交的数据未转码前=="+name);
if(name != null)
name = new String(name.getBytes("ISO-8859-1"));
//name = new String(name.getBytes("UTF-8"));
//name = new String(name.getBytes("gb2312"),"ISO-8859-1");
System.out.println("=========="+name);
request.setCharacterEncoding("UTF-8"); //这一句很重要
java.io.BufferedReader br = request.getReader();
String str = "";
while ((str=br.readLine()) != null) {
System.out.println("/r/n1. 通过BufferedReader读取xmlhttp的结果"+str);
//String content = new String(str.getBytes("ISO-8859-1"));
//System.out.println("xmlhttp转码后结果"+str);
}
javax.servlet.ServletOutputStream sos = response.getOutputStream();
sos.print("login success");
sos.close();
%>
经过这样的简单处理,就可以实现中文乱码的解决了(无论是xmlhttp还是表单提交的数据都能正确转码,测试通过于Tomcat5及WebLogic8)