jsp 表单中文乱码解决办法及原理
如果网页是GB2312编码的,则在表单提交的时候是按这个编码提交的,而request默认是ISO-8859-1编码提交的,所以会得到乱码,
只要设置request.setCharacterEncoding("gb2312"); 即可解决乱码问题。
而如果网页是utf-8编码的,同理就要设置为request.setCharacterEncoding("gb2312");
请看下面的例子:
1
<%@page session="true" contentType="text/html;charset=utf-8" errorPage="/services/error.jsp" pageEncoding="gb2312"%>
<%
String mes="你好啊中国";
request.setCharacterEncoding("utf-8");
String testVal=request.getParameter("search_project");
%>
在此例子中,因为页面是utf-8编码(contentType="text/html;charset=utf-8"),所以提交的时候就是按utf-8编码来提交表单的,
这时我们 request.setCharacterEncoding("utf-8"); 则能得到正确的中文字符,而如果 request.setCharacterEncoding("gb2312");则乱码。
同理,如果代码是下面这样的:
2
<%@page session="true" contentType="text/html;charset=gb2312" errorPage="/services/error.jsp" pageEncoding="gb2312"%>
<%
String mes="你好啊中国";
request.setCharacterEncoding("utf-8");
String testVal=request.getParameter("search_project");
%>
在上面例子中,因为页面是gb2312编码(contentType="text/html;charset=gb2312"),所以提交的时候就是按gb2312编码来提交表单的,
而这时我们 request.setCharacterEncoding("utf-8"); 就依然是乱码,而如果 request.setCharacterEncoding("gb2312");则
问题解决。
上面两个例子中 pageEncoding="gb2312" 均是指定了服务器已何种编码方式读取jsp文件,
contentType="text/html;charset=gb2312" 是指定了服务器以何种编码方式响应浏览器的请求(也就是浏览器页面的编码格式)