http://172.16.15.23/jspweb/manage/prou1.jsp?language_1=cn&productname=发贴
为什么我接收参数productname2时,
String  productname = new String(request.getParameter("productname").getBytes("ISO8859_1"),"GBK");
是乱码。
我试过用String  productname = new String(request.getParameter("productname"))获取也是乱码?
为什么?
怎样解决?

解决方案 »

  1.   

    我通过public String toUnicode(String strText,String code) throws UnsupportedEncodingException{ 
    char c;
    String strRet = "" ; 
    int intAsc; 
    String strHex; 
    strText = new String(strText.getBytes("ISO8859_1"),code); 
    for ( int i = 0; i < strText.length(); i++ ){ 
    c = strText.charAt(i); 
    intAsc = (int)c; 
    if(intAsc>128){ 
    strHex = Integer.toHexString(intAsc); 
    strRet = strRet + "&#x" + strHex+";"; 
    }
    else{ 
    strRet = strRet + c; 
    }
    }
    return strRet ; 
    }
    这个转换一次,就是把GB2312转成ISO8859_1,接收时再转成GB2312,还是成乱码
      

  2.   

    String  productname = new String(request.getParameter("productname").getBytes("ISO8859_1"));
      

  3.   

    一般在用url 传参数的时候,最好不要传中文
    给一段代码,你用一下,看看可以吗??
    <%!
       String trans(String chi)
       {
       String result = null;
       byte temp[];
       try
      {
       temp = chi.getBytes("iso-8859-1");
       result = new String(temp);
       }
       catch(UnsupportedEncodingException e)
       {
       System.out.println(e.toString());
       }
       return result;
       }%>
      

  4.   

    可以用javascript的escape转化一下了,取的时候在unescape.这样应该没有什么问题。
      

  5.   

    请问sheep219(sheep219),我用escape转化了
    得到的http://172.16.15.23/jspweb/manage/prou1.jsp?language_1=cn&productname_2=%u535A%u601D%u6E05是个,请问题,获取的时侯应该怎样处理呢?请不吝赐教!
      

  6.   

    在网上查一下吧,用filter,肯定搞得定的!
      

  7.   

    你只需要在表单传送数据处理的页面加入
    <% 
    request.setCharacterEncoding("gb2312"); 
    %>
    就可以了!基本上能解决数据的乱码问题!特别是对于数据库的写入操作!
      

  8.   

    根据我以往的测试,在url上传递参数是平台相关的,也就是你系统默认的编码方式.
    而且也没有必要在url上传递参数,也没有实际意义(你不会想让用户用url来传递参数吧?用户恐怕也不会乐意),也只要页面以get或者post方式提交都不存在乱码就可以了.
      

  9.   

    现在的关键是其它方式都没有问题,现在我需要用URL来传参数得嘛,各位想想法,拜托!
      

  10.   

    用过滤器,并且修改tomcat的server.xml文件。具体看看这里:
    http://www.blogjava.net/rickhunter/articles/33571.html写转码程序不是很好的方法,不知为什么很多人都喜欢写转码程序,我所见过的项目都没有哪个写转码程序的,一个过滤器基本就搞定大部分问题,只是有个别问题需要特别对待。
      

  11.   

    url传参数跟get和post方法都不同,编码跟客户端平台相关,你无法得到一个统一的方法处理传递来的参数.跟过滤器之类的也毫无关系.如果你确定客户端平台所用编码,给你一个方法:去掉其他处理编码措施,假设客户端平台编码方式为GBK,要获取一个名为mypara的参数,mypara = request.getParameter("mypara");
    mypara = new String(mypara.getBytes("iso-8859-1"),"GBK");
    然后mypara就可以正常显示处理了.
    另外,很好奇你需要用url传参数的理由?
      

  12.   

    正解在这:
    传参前需要这样转换下
    变量 = java.net.URLEncoder.encode(变量);
      

  13.   

    String str=new  String(java.net.URLDecoder.decode(value.toString(),"utf-8").getBytes("utf-8"),"utf-8"));
      

  14.   

    使用JAVA SCRIPT的ESCAPE函数转一次
    不过你在服务器上找不到UNESCAPE转回来
    只能自己写或者用别人写的,这样子显然很麻烦,没必要用中文做参数
    约定别的符号也一样的
      

  15.   

    String value = request.getParameter("xxx");
    String str=new String(value.getBytes("iso-8859-1"),"utf-8"));
    str = java.net.URLDecoder.decode(value,"utf-8");
      

  16.   

    根据Web规范,URL必须以UTF-8字符集进行编码。服务器端的设置,Tomcat可以参考 http://tomcat.apache.org/faq/connectors.html 最后一段。IE设置  Internet选项->高级->总是以UTF-8发送URL(默认为true)firefox设置 在地址栏输入 about:config 打开内部参数页面,找到network.standard-url.encode-utf8 这一项,设为True(默认为False)PS. 在遵守标准方面,难得IE也有比firefox做得好的时候
      

  17.   

    <% 
    request.setCharacterEncoding("gb2312"); 
    %>
      

  18.   

    我知道,你要修改tomcat的server.xml文件,找到Connector元素,添加UILEncoding="GBK"就可以了