一个url中的参数中含有中文,在一个页面中显示这种url时用java.net.URLEncoder.encoder("xxxxx", "gbk")将其中的中文编码,在接收页中,应该是使用java.net.Decoder.decoder("xxxxx", "gbk")解码,在服务器中是正常的,但是在本机中得到的参数显示出来就是乱码,要用字符串函数getBytes("ISO8859-1")转换后才能正常显示,而url中的中文不用encoder()编码,本机也是这样显示,而服务器上运行则得到乱码。
这是怎么回事?decoder()在本机为什么无效?

解决方案 »

  1.   

    我现在都用javascript的encodeURIComponent方法来编码中文参数,
    后台无需解码。但要保证:
    1、jsp文件的编码格式为UTF-8,
    2、JSP页面最上方声明:
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    3、tomcat/conf/server.xml中,增加下面红色的配置项:
    <Connector port="8080" maxHttpHeaderSize="8192"
                   maxThreads="500" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="300"
                   connectionTimeout="10000" disableUploadTimeout="true" URIEncoding="UTF-8"/> 这样一般不会出现乱码。
      

  2.   

    javascript不行,我还要在服务器端进行一些处理
      

  3.   

    楼主可以参考:
    http://blog.csdn.net/great1681/archive/2009/04/20/4094077.aspx
      

  4.   

    传递url 浏览器对url会进行一次编码 需要用getBytes("ISO8859-1")得到
      

  5.   

    但是在服务器上只需decoder(),在本机只需getBytes("ISO8859-1")
      

  6.   


    什么javascript?唉,比如:
    你如果要调用:/test.action?param=中文
    就写成/test.ation?param=encodeURIComponent('中文'),
    这和你后台处理没啥关系。然后按照我说的几步来做。
      

  7.   


    param=encodeURIComponent('中文')
    难道不是javascript?
      

  8.   


    JS:var xx = encodeURIComponent(encodeURIComponent('中文'));xx.jsp?yy=xxJAVA:用URIDecode解码
      

  9.   

    我想知道的就是怎么不同机器运行java.net.URLEncoder.encoder("xxxxx", "gbk")结果不一样   
      

  10.   

    刚想到是不是服务器的jsp容器把url先行decode了,而本机的jsp容器没有先行decode。
    jsp容器的decode难道有什么设置?