今天,
研究了一晚上。
c
haset.jsp
-----------------------------------------------------------------------
%@ page language="java" contentType="text/html; charset=gbk"
pageEncoding="gb2312"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<script type="text/
javascript" src="<%=request.getContextPath()%>/js/jquery-1.6.2.min.js"></script>
<script type="text/javascript">
var info = "我来了";
var url = "http://localhost:8088/webapp/charset.do";
alert(info);
$.post(url,{info:info},
function(data){alert(data)},'text');
</script>
<title>Insert title here</title>
</head>
<body>
hello,charset
</body>
</html>
---------------------------------------------------------------------
页面的
编码为gb2312
protected void doPost(Http
ServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String iso = request.getParameter("info");
for (byte b :request.getParameter("info").getBytes("utf-8")){
System.out.print(b+" ");
};
System.out.println();
for (byte b : "我来了".getBytes("ISO-8859-1")){
System.out.print(b+" ");
}
String info = new String(request.getParameter("info").getBytes("gbk"),"utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.print(request.getParameter("info"));
}
在servlet 中设置request.setCharacterEncoding("utf-8"); 就能正确转换中文。
然后,把页面的编码改成utf-8. servlet不变,也能正确转换成中文
以下是自己的猜想:
当页面 post发送之后,浏览进行
url编码,发送到服务器后,tomcat 先进行
url解码,然后根据页面中的字符编码 转换成 unicode 的字符编码,存放在
内存。最后,servlet读取的字符的编码,应该是utf-8后的编码.
所以,页面中的编码,最后经过服务器后,最后存放的形式 应该utf-8的编码方式.
然后,再request.setCharacterEncoding("utf-8")之后,servlet 读取request.getParameter()的时候,认为这是utf-8的编码方式,无须转换,就能正确显示中文。
纯属猜想