jsp页面设置了编码<%@page contentType="text/html; charset=utf-8"%>
在Action方法里面获得request的Parmater参数。
使用IE的时候下面的代码能输出正确汉字
String param = (String) request.getParameter("param");
param = new String(param.getBytes("ISO8859-1"));
System.out.println("param="+param);
使用火狐的时候,第二行必须改成
param = new String(param.getBytes("ISO8859-1"), "UTF-8");
才能输出正确汉字。
求分析原因,谢谢!

解决方案 »

  1.   

    本质原因不是出在浏览器,你把Tomcat的URL编码设置下,然后试试看:conf\server.xml<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
      

  2.   

    试过了 还是一样的结果
    用IE输出:param=安仁
    用火狐输出:param=瀹変粊
      

  3.   


    然后尝试取消所有转码:
    String param = (String) request.getParameter("param");
    System.out.println("param="+param);
      

  4.   

    先request.setCharacterEncoding()
    在request.getParameter()
      

  5.   

    发帖之前试过各种办法了,都没用,我就想知道为什么用火狐的时候非要写成
    param = new String(param.getBytes("ISO8859-1"), "UTF-8");
    才能正常输出
      

  6.   

    URL 用js encodeURIComponent 转一下
      

  7.   

    要知道本质,
    param = new String(param.getBytes("ISO8859-1"));
    System.out.println("param="+param) 1、你这个就等于说你没设置编码,看jdk的API帮助文档String
    public String(byte[] bytes)通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。新 String 的长度是字符集的函数,因此可能不等于 byte 数组的长度。 
    当给定 byte 在给定字符集中无效的情况下,此构造方法的行为没有指定。如果需要对解码过程进行更多控制,则应该使用 CharsetDecoder 类。 
    参数:
    bytes - 要解码为字符的 byte
    从以下版本开始: 
    JDK1.1 平台默认字符指什么呢?你看看两个浏览器,默认编码肯定是不一样的。所以导致不一样的结果。
    2、你这个第一个做法就是不对的,你知道你getByte意味着什么吗,意味着重新组织,就算服务端统一设置过编码了 也没有用的,你getbyte后必须设置你的统一编码,你没设置,所以你的做法就是错的。跟这那都没关系。希望能帮到你个人技术博客:http://www.happyalaric.com
      

  8.   

    用了你的办法,问题解决了
    js里面用encodeURIComponent把传递的参数转了一下码,
    然后在java类中再转一次码
    String param = (String) request.getParameter("param");
    param = new String(param.getBytes("ISO8859-1"), "UTF-8");
    这样IE和火狐都能正常输出了。
    但是我仍然不明白之前出现的问题的原因,能帮忙解释下吗,谢谢了!
      

  9.   

    以前遇到过这个问题。原因不是特别清楚。以下来自网络:貌似有道理
    使用 <form>...</form> 提交的,浏览器会自动编码一次.
    ajax 或者Get方式提交的,需要自己手动编码。而encodeURIComponent 使用的是 UTF-8 编码规则来编的.
      

  10.   

    15楼咋被抽了?
    是用的ajax,以GET方式传递参数。
    问题解决了,原因自己理了一下。
    谢谢大家了!!