1、页面的编码
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>--这是jsp页面存储的编码 中文不能用iso-8859-1进行存储。
<%@page contentType="text/html; charset=utf-8" %>--这是发送请求之后返回页面的编码对于的是 response.setContentType("text/html;charset=utf-8");
一般来说将jsp存储页面、相应页面都设置为UTF-8这样出现中文乱码的机会较少。
2、Form 提交表单时的乱码
2.1 get 方式
DemoGet1.jsp
<%@ page language="java" import="java.util.*" pageEncoding="Utf-8"%>
<form action="./DemoGet2.jsp" method="get" enctype="application/x-www-form-urlencoded" >
<input type=hidden name=act value=动作 />
<input type=submit value=ok>
</form>
DemoGet2.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
String tempVal = request.getParameter("act");
out.println(new String(tempVal.getBytes("ISO-8859-1"), "Utf-8"));
利用URL进行jsp页面传值如同Form的Get 方法,因此处理的方式和From 的表单Get 一样。
一般来说我们很少直接在URL里面把参数写成中文,如例子中的"type=苹果"这样传递。如果出现这种情况,在我们的接收参数的页面我们只需要做个简单的转换就可以了。
传递链接:<a href='./MyJsp2.jsp?act=<%=URLEncoder.encode("中国人 非常好 =-")%>'>test</a>
接受参数:<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="java.net.*" %>
String tempVal = URLDecoder.decode(request.getParameter("act"));
out.println(new String(tempVal.getBytes("ISO-8859-1"), "gb2312"));
2.2 post 方式
DemoPost1.jsp
<%@ page language="java" import="java.util.*" pageEncoding="Utf-8"%>
<form action="./DemoPost2" method="post" enctype="application/x-www-form-urlencoded" >
<input type=hidden name=act value=动作 />
<input type=submit value=ok>
</form>
接受有两种方式:
第一种如同DemoGet2.jsp
第二种如下:
<%@ page language="java" import="java.util.*" pageEncoding="Utf-8"%>
<%@page contentType="text/html; charset=utf-8" %>
<% request.setCharacterEncoding("utf-8");
String tempVal = request.getParameter("act");
%>
此时<%@page contentType="text/html; charset=utf-8" %>如果charset设为ISO-8859-1 则同样会出现乱码。因为这是相应的页面,ISO-8859-1不支持中文。
为什么第二种情况只对post方法有用:
pageEncoding这个只对post起作用。get方法提交时,大家可以从地址栏里看到提交的参数,这是因为get方法传递是作为报文头提交的,而pageEncoding对报文头是没有作用的,所以仍然按照 iso8859-1编码,才出现了刚才的乱码问题。而post提交的是form表单的内容,pageEncoding指定了它的编码,所以他会按照指定编码传递。
reference:http://www.cnblogs.com/xuqiang/archive/2010/09/26/1953495.html
3、jquery 的Ajax 中文乱码
传递时进行两次encodeURI 编码
$.get('http://localhost:8080/jqueryjs/UserVerify?userName='+encodeURI(encodeURI(_value)),function(data){
$("#ajaxDemo").html(data);
});
接受进行一次编码
String param = request.getParameter("userName");
String userName = java.net.URLDecoder.decode(param, "Utf-8");
就ok了