post 提交 servlet 的中文乱码问题_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > post 提交 servlet 的中文乱码问题

post 提交 servlet 的中文乱码问题

 2011/12/9 9:39:53  java2i  http://java2i.iteye.com  我要评论(0)
  • 摘要:今天,研究了一晚上。chaset.jsp-----------------------------------------------------------------------%@pagelanguage="java"contentType="text/html;charset=gbk"pageEncoding="gb2312"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3
  • 标签:文乱码问题 文乱码 Servlet 问题 乱码问题
今天,研究了一晚上。 

chaset.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(HttpServletRequest 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的编码方式,无须转换,就能正确显示中文。


  纯属猜想
发表评论
用户名: 匿名