系统windowsXP
JDK1.5.06
tomcat5.5.12我在jsp页面设置字符编码为:
<%@ page contentType="text/html; charset=utf-8"%>
设置tomcat默认发送字符编译设为
 URIEncoding="utf-8"加过滤器为
if (httpServletRequest.getMethod().equals("POST")) {
request.setCharacterEncoding("UTF-8");
} else if (httpServletRequest.getMethod().equalsIgnoreCase("GET")) {
try {
String sex = new String((request.getParameter("sex")).getBytes("UTF-8"),"utf-8");
System.out.println("过滤器=>>" + sex);
} catch (Exception e) {}
 }上面的String sex = new String((request.getParameter("sex")).getBytes("UTF-8"),"utf-8");这句换成过其化编也都是出现乱码(iso-8859-1,gbk,gb2312)全部同样。乱码现象,如果是单数的中文最后一个中文变成?,如果是双数中文则正常。
求各位高手帮忙.

解决方案 »

  1.   

    get方法才会出现此现象,
    post则正常
      

  2.   

    new String((request.getParameter("sex")).getBytes("UTF-8"),"utf-8");
    为何转来转去呀
    和 request.getParameter("sex")是一样的呀
      

  3.   

    http://www.dreamdak.com/show.aspx?id=1170&cid=141
      

  4.   

    回复人: treeroot(旗鲁特) ( ) 信誉:106  2006-02-06 15:10:00  得分: 0  
     
     
       new String((request.getParameter("sex")).getBytes("UTF-8"),"utf-8");
    为何转来转去呀
    和 request.getParameter("sex")是一样的呀
      
     上面我提到的转码方式我都试过了,一直都不好使。
    直接用request.getparamter("sex")是一样的,我知道。不过就是有病乱投医了。
      

  5.   

    回复人: treeroot(旗鲁特) ( ) 信誉:106  2006-02-06 15:10:00  得分: 0  
     
     
       new String((request.getParameter("sex")).getBytes("UTF-8"),"utf-8");
    为何转来转去呀
    和 request.getParameter("sex")是一样的呀你还没有说如何来解决tomcat5这个问题呢。
      

  6.   

    试试.
    String sex = new String((request.getParameter("sex")).getBytes("ISO-8859-1"),"UTF-8");
      

  7.   

    Get 方法是固定使用8859-1编码, 楼上是对的
      

  8.   

    String sex = new String((request.getParameter("sex")).getBytes("ISO-8859-1"),"UTF-8");试过了,不好使。
    to: 回复人: TinyJimmy(Jimmy) ( ) 信誉:105  2006-02-06 19:31:00  得分: 0  
     
     
       Get 方法是固定使用8859-1编码, 楼上是对的
      
     
    你是说get方法一定就是iso-8859-1编码吗?那么我把tomcat设置成utf-8,页面设置为utf-8会出错吗?用楼上的方法进行转换?同样还是乱码的。
      

  9.   

    你能不能定一个Filter,无论Get还是Post,你都在
    doFilter()里执行 
    request.setCharacterEncoding("UTF-8");然后在具体需要取参数的  jsp 或者  servlet 里,
    简单采用 request.getParameter("sex");试试看?
      

  10.   

    to:回复人: Leemaasn(呆鸟) ( ) 信誉:126 我现在就是像你说的那样做的,还是起不到任何的作用。
    请帮忙再试一下。
      

  11.   

    http://www.javaworld.com.tw/jute/post/view?bid=9&id=44042&sty=1&tpg=1&age=0
      

  12.   

    呵呵, 看来tomcat 5.5版本的编码方法不一样了.
      

  13.   

    我用过在传之前将文字转码,不过那是用在hidden中,对汉字进行java.net.URLEncoder.encode(str, "utf-8");
    然后在目标页面中使用java.netURLDecoder.decode(request.getParameter("str"), "utf-8");就可以了。不过如果是用户输入,就没办法转码了。
    你可以把某几个汉字的各种编码用GBK显示出来,然后再把实验得到的乱码和这些对照,就猜出她到底是怎么编码的了。你这种出现半个汉字的情况我好像遇到过。就是当你页面写的是utf-8,但其实际编码并不是utf-8的时候就会出现。印象中啊。你可以通过IDE修改页面编码(页面本身的编码,而不是写在顶端的那句话)。
      

  14.   

    这么多方法还不行的话就如楼上所说把request.getParameter取出来的比较一下,看看是什么编码
      

  15.   

    碰到过这个问题,应该是Tomcat的问题,
    String sex = new String(request.getParameter("str").getBytes(“ISO-8859-1”));
    应该可以了。
      

  16.   

    楼上的方法不用转换就可以直接用了吗?
    还没有试过。一会试试看。to: kingfish(龙城) ( ) 信誉:115  2006-2-7 15:21:00  得分: 0  
        
    这么多方法还不行的话就如楼上所说把request.getParameter取出来的比较一下,看看是什么编码取出来如何比较编码呢?
    String s = "中国";
    s.getbyte("iso-8859-1")
    s.getbyte("gbk")这样与request.getParameter("")进行比较吗?  
     
      

  17.   

    按照所说,
    回复人: kingfish(龙城) ( ) 信誉:115  2006-2-7 15:21:00  得分: 0      
    这么多方法还不行的话就如楼上所说把request.getParameter取出来的比较一下,看看是什么编码我的作法如下:页面编码为utf-8,tomcat为URIEncoding="utf-8"System.out.println("直接取=>"+request.getParameter("sex"));
    System.out.println("UTF-8=>" + new String(request.getParameter("sex").getBytes("utf-8")));
    System.out.println("gbk=>"+new String(request.getParameter("sex").getBytes("gbk")));
    System.out.println("iso-8859-1=>"+new String(request.getParameter("sex").getBytes("iso-8859-1")));
    System.out.println("gb2312=>"+new String(request.getParameter("sex").getBytes("gb2312")));所得结果如下:
    直接取=>?
    UTF-8=>锟?
    gbk=>?
    iso-8859-1=>?
    gb2312=>?把URIEncoding="utf-8"换成iso-8859-1结果如下:
    直接取=>??
    UTF-8=>莽聰
    gbk=>??
    ISO-8859-1=>鐢
    gb2312=>??
    iso8859-1=>鐢把URIEncoding="utf-8"换成URIEncoding="gbk"结果如下:
    直接取=>鐢
    UTF-8=>閻?
    gbk=>鐢
    ISO-8859-1=>?
    gb2312=>?
    iso8859-1=>?
    以上的做法应该是说明我的编码方式为gbk,而非我设成tomcat的utf-8或iso-8859-1编码方式。
    那么我该如何来改正。
    一会把页面设成gbk去试试。期待大家关注此贴一下
      
     
      

  18.   

    另外“司令”给出的贴子http://www.javaworld.com.tw/jute/post/view?bid=9&id=44042&sty=1&tpg=1&age=0我在解决这个文章的时候就看到过了,但并没有解决我现在遇到的问题。
    此贴说tomcat会采用"fast conversion 來處理",我现在也在tomcat中加入了URIEncoding="ISO-8859-1"
    ,可现在出现上面所说的问题。
    重申:
    tomcat5.5.12
    winXP
    页面编码为utf-8
      

  19.   

    终于搞出来了。呵呵
    用下面的朋友答复的方法解决的。再此表示感谢。同时多谢各位对此贴的关注。
    回复人: hamburger1981(曾经的汉堡包) ( ) 信誉:100  2006-02-07 19:28:00  得分: 0  
       碰到过这个问题,应该是Tomcat的问题,
    String sex = new String(request.getParameter("str").getBytes(“ISO-8859-1”));
    应该可以了。另外请哪位解释一下为什么。
    我的tomcat设置成iso-8859-1编码,页面用utf-8,之后我用
     new String(request.getParameter("str").getBytes(“ISO-8859-1”),"utf-8");
     new String(request.getParameter("str").getBytes(“ISO-8859-1”),"iso-8859-1");
     new String(request.getParameter("str").getBytes(“ISO-8859-1”),"gbk");
     new String(request.getParameter("str").getBytes(“ISO-8859-1”),"gb2312");
    都试过,全是不可用。乱码。
    为什么用 new String(request.getParameter("str").getBytes(“ISO-8859-1”));
    便可以呢?请再解释一下tomcat编码与页面和我接收转换编码之间的三者关系。谢谢。
    分不够我可以用我的另一个号开200分相送。
      

  20.   

    new String(request.getParameter("str").getBytes(“ISO-8859-1”),"utf-8");
     new String(request.getParameter("str").getBytes(“ISO-8859-1”),"iso-8859-1");
     new String(request.getParameter("str").getBytes(“ISO-8859-1”),"gbk");
     new String(request.getParameter("str").getBytes(“ISO-8859-1”),"gb2312");
    都试过,全是不可用。乱码。
    为什么用 new String(request.getParameter("str").getBytes(“ISO-8859-1”));
    便可以呢?
    -----------------------------------------------
    了解编码解码的原理就可以了。
    “汉字”->1234(用utf-8编码)->“乱码”(用iso解码)->1234(用iso编码)->“汉字”(用utf-8解码)
    new String(request.getParameter("str").getBytes(“ISO-8859-1”));使用平台默认字符集进行解码。也就是说,你的str使用的是你系统默认字符集进行编码的。而这个字符集不同于gbk,utf-8,gb2312和gbk。
      

  21.   

    new String(request.getParameter("str").getBytes(“ISO-8859-1”)); 
    转成默认的file.encoding, 其他则转成指定的编码
      

  22.   

    另外,可以将页面编码转换为UTF-8(另存为时选择编码类型为UTF-8)