首先是2段代码
x.jsp  <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  <html>   
  <body>   
  <form   name="form1"   method="post"   action="xx.jsp">     
          <input   type="text"   name="a">   
          <input   type="submit"   name="Submit"   value="提交">     
  </form>   
  <p>&nbsp;</p>   
  </body>   
  </html>
xx.jsp  <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  <html>   
  <body>   
    ${ param.a}
  </body>   
  </html>
很简单 在xx.jsp中显示x.jsp中的内容 测试1:在x.jsp中输入 "大家" 点击后 在xx.jsp 显示的为乱码 如果输入英文 可以正确显示解决测试 :
1. 在xx.jsp中加入 代码块  
request.setCharsetEncoding("GB2312"); 可以正确显示2. 在xx.jsp中加入 代码块 
利用 new   String(param.a.getBytes(),"GB2312");   可以正确显示 3. 利用jstl  <%@   taglib   prefix="fmt"   uri="http://java.sun.com/jsp/jstl/fmt"   %>   
在body下输入 <fmt:requestEncoding   value="GB2312"   />   可以通过 (觉得这个和第1个道理是一样的)
测试 2 : 
下面 将 x.jsp 修改 将form的提交方式改成 get<form   name="form1"   method="get"   action="xx.jsp">     在x.jsp中输入 "大家" 点击后 在xx.jsp 显示的为乱码 如果输入英文 可以正确显示
利用测试1中 3中方法 不能解决 ..测试 3 :
在地址输入http://127.0.0.1:8080/Demo/xx.jxp?a=你好
显示乱码 用测试1中解决方法不能解决测试2 和测试3 到现在我也没有一个办法来解决
自己总结的结论 : 通过post可以避免字符乱码问题 为request设置编码就可以
但用get方法时候 出现乱码错误
和get方法一样的是 利用url重写 也会出现乱码错误不知道这是什么原因 希望大虾们能够帮我解答 一下
另外 对于乱码 有没有一个一劳永逸的办法呢?

解决方案 »

  1.   

    使用get方法提交表单,浏览器会对URL中的参数使用UTF-8编码,但是由于get方法提交内容没有在HTTP请求中指定参数的编码方式,所以服务器端会使用默认的编码方式来对URL的参数进行解码,譬如Tomcat默认的就是ISO8859-1,所以在这个时候,使用request.getParameter获取的参数是"GB2312 -> UTF-8 -> ISO8859-1"的结果,可想而知肯定是乱码一堆。而使用post方法提交表单,浏览器会使用页面中指定的编码方式对提交内容进行编码,譬如:<meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> 提交的表单内容就是用 GB18030编码。这个时候request.setCharsetEncoding才会生效。使用get提交的解决办法:
    1.就是按照"GB2312 -> UTF-8 -> ISO8859-1"倒着来。new String(param.a.getBytes("ISO8859-1"), "UTF-8");这就可以显示正常。
    2.对服务器默认的URL解码方法进行设置,譬如tomcat,将"ISO8859-1"设置为"UTF-8",具体参考具体服务器的帮助文档。
      

  2.   

    谢谢1L的答复 但能否知道我要使用el不出现乱码因该怎么办?
      

  3.   

    对于乱码 有没有一个一劳永逸的办法呢?
    使用过滤器.
    我blog中的第二种方法
    http://blog.csdn.net/caoyinghui1986/archive/2008/03/25/2216198.aspx
      

  4.   

    3L 和 2L 用你你们2个人的办法 
    在我的 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
      <html>   
      <body>   
        ${ param.a}
      </body>   
      </html>
    中输入 
    http://127.0.0.1:8080/Demo/x.jsp?a=你好
    还是出现乱码  继续在线等
      

  5.   

    补 如果我使用 new String(param.a.getBytes("ISO8859-1"), "GB2312");
    而不是utf-8则可以正常显示 
    不明白 UTF-8不是中文解码最稳定最好的吗?
      

  6.   

    怎么没有人回答吗?
    是不是都认为这是一个小问题了?
    请你们做个测试 
    代码如下
    x.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
      <html>  
      <body>  
        ${ param.a} 
      </body>  
      </html> 你能够让http://127.0.0.1:8080/Demo/x.jsp?a="你好"
    输入正确的值吗?