我用了一个过滤器设置request.setCharacterEncoding("UTF-8");但是在接收URL中文参数的时候会出现乱码,通过
转码可以转换成中文new String(keyword.getBytes("iso-8859-1"),"UTF-8"),但是原本过滤器里面已经用了UTF-8,
所以为什么这个地方还要转码呢?

解决方案 »

  1.   

    在url中给中文部分加密,然后在类里面解密
      

  2.   

    我也遇到过一样的问题,没有用过滤器,我在server.xml里加了个编码的属性 就解决了
      

  3.   

      2 页面 formsave.jsp
    <%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>测试数据</title>
    </head>
    <body>
    <%
    String test=request.getParameter("test");
    out.print(test);
    %>
    </body>
    </html>
    结果发现是乱码这是因为 tomcat 取得数据以后转为iso8859-1发送给formsave.jsp引起的
    过程formpost.jsp (utf-8)--------->>> tomcat(数据iso8859-1)-------------->>>>formsave.jsp(utf-8)
    所以要在formpost.jsp  加入 test=new String(test.getBytes("ISO8859_1"),"utf-8");
    这样做要在每个页面加入这个代码很麻烦 所以最好在每个页面加载前使用过滤器
    (过滤器 在web.xml中注册)
    但是如果提交的页面是采用get或者js写路径的方式提交过滤器不起作用
    这是解决方法
     Get走的是url提交,而在进入url之前已经进行了iso8859-1的编码处理。要想影响这个编码则需要在server.xml的Connector节点增加useBodyEncodingForURI="true" 属性配置,即可控制tomcat对get方式的汉字编码方式,上面这个属性控制get提交也是用request.setCharacterEncoding ("UTF-8")所设置的编码格式进行编码。所以自动编码为utf-8,接受页面正常接受就可以了。但我认为真正的编码过程是,tomcat又要根据<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" useBodyEncodingForURI="true" disableUploadTimeout="true" URIEncoding=”UTF-8”/>
    (tomcat6.0的时候似乎最后面的URIEncoding=”UTF-8”不能加,或者不用加,不加测试通过)里面所设置的URIEncoding=”UTF-8”再进行一次编码,但是由于已经编码为utf-8,再编码也不会有变化了。如果是从url获取编码,接受页面则是根据URIEncoding=”UTF-8”来进行解码的
      

  4.   

    http://blog.csdn.net/xcs19405/archive/2008/02/28/2128235.aspx  有对jsp乱码的 总结
      

  5.   

    中文加密URLEncoder.encode("中文","UTF-8");
      

  6.   

    lz应该是用的GET方式传的参数,所以才造成乱码问题
    request.setCharacterEncoding("UTF-8");这一句只对post方式提交的实体部分奏效
    对于在url中传递的参数无效。
    可以更改useBodyEncodingForURI参数使url中的参数解码时采用和实体相同的字符集。
    如下
    \conf\server.xml中
    查找<Connector port="8080"
    在 />前添加 useBodyEncodingForURI="true"