var upFile = "D:\luceneData\M1\BBS\MyBBS\upload\日本語.txt"
   function down() {
      document.forms[0].action = "do_download.jsp?delFile="+ upFile;
      document.forms[0].method = "post";
      document.forms[0].submit();
    }
    action直接跳向do_download.jsp 不经过servlet
    do_download.jsp:
    <%@ page contentType="text/html;charset=UTF-8" import="com.macchy.m2.server.plugin.bbs.*" %><%
    %>
    <%
     String filePath = request.getParameter("delFile");
     filePath = new String(filePath.getBytes("ISO-8859-1"), "UTF-8");
     System.out.println(filePath);
    %>
    输出结果:
    D:/luceneData/M1/BBS/MyBBS/upload/日本?Etxt    怎么解决这个从url传过的参数,取得时候是乱码问题。。

解决方案 »

  1.   

    我也是同样的问题啊,页面是UTF-8的,超链接传过去的都是乱码!!!!!!
      

  2.   

    我的在JS里传的时候都正常
    不过request取得的时候就乱码了
      

  3.   

    或者在页面中加入这一句
    <% 
    request.setCharacterEncoding("utf-8"); 
    %>
      

  4.   

    request.setCharacterEncoding("utf-8"); 
    这也不好使得
    不走SERVLET
    怎么FILTER阿
      

  5.   


    你试过?Filter和servlet不一样的
    没servlet同样可以走Filter的
    在web.xml文件配一下就好了
      

  6.   

    在apache-tomcat-5.5.25\conf下
    <Connector  ......中加入
    useBodyEncodingForURI="true"
      

  7.   

    注意:jsp最终都是被当成servlet来处理,没有什么jsp不经serlvet的说法.
    你这个乱码问题不是可以通过简单办法处理的,因为日本2个是正常的.如果我猜得没错的话,当你是奇数个汉字的时候,最后一个字就是乱码.而偶数个是没问题的.(呵呵,很奇怪吧)
    解决办法:参数用javascript的encode 两次该参数如:encode(encode(parameter)),然后后台用java模拟javascript的decode方法去decode这个参数.如果我猜错的了话,你就看你的编码设置吧.............
      

  8.   

    如果用的是tomcat的话.进入conf目录找到server.xml.修改Connector的useBodyEncodingForURI为true(如果没有就直接写上去),再用request.setCharacterEncoding()就可以了
      

  9.   

     document.forms[0].action = "do_download.jsp?delFile="+ upFile; 改这个语句吧,你这么提交等于get和post 都用了。下面你写了
    document.forms[0].method = "post"; 
    document.forms[0].submit();为什么还要do_download.jsp?delFile=upFile 这么传呢?
    用get方式传中文这样的值时一定要加密然后再解密。所以我建议是在form里加个<input type="hidden" name="delFile" value="">
    然后脚本里加上
    document.forms[0].delFile.value = upFile ;先试一下吧,如果还不行,大家再讨论!
      

  10.   

    在apache-tomcat-5.5.25\conf下
    <Connector  ......中加入
    useBodyEncodingForURI="true"加这个有什么作用啊
      

  11.   

    useBodyEncodingForURI="true" 
    已经被pass了
    不好使阿
    web.xml也有filter阿
    怎么就是乱码呢
      

  12.   

    楼上的...useBodyEncodingForURI和filter两个概念..别混在一起谈...
      

  13.   


    知道
    关键怎么解决阿
    传之前都是正常的 就是request的时候就乱码了
      

  14.   

    在url中传汉字总是乱码,不好解决。建议使用form中的hidden来保存,然后传递后台后取这个的value。这样可以避免乱码问题
      

  15.   

    你可以试试filePath = new String(filePath.getBytes("ISO-8859-1"), "GBK"); //改为gbk试试
      

  16.   

    恩,用post方法传就没有问题拉,为什么一定要用get在url里面传呢。如前面几位大大所说的,在form里加个hidden的文本框,把这个filePath传过去就OK了
      

  17.   

    1.格式化URL地址传参编码:在Tomcat\conf\server.xml 的Connector标签里添加一个URIEncoding="UTF-8"属性;
    2.格式化非URL地址传参编码:在JSP或Servlet里取值前使用request.setCharacterEnconding("UTF-8");
    3.格式化非URL地址传参编码:使用Filter接口,在实现Filter的类里添加request.setCharacterEnconding("UTF-8"),最后在web.xml的web-app节点下添加两个子节点:
     <filter>
            <filter-name>SecurityFilter</filter-name>--实现Filter的类名
            <filter-class>wind.SecurityFilter</filter-class>--具体的类关系
        </filter>
        <filter-mapping>
            <filter-name>SecurityFilter</filter-name>--实现Filter的类名
            <url-pattern>/admin/*</url-pattern>--作用的路径范围:admin下的所有页面
        </filter-mapping>
    注:2和3作用一样,分别和1搭配使用
      

  18.   

    1) 打开tomcat的server.xml文件,找到区块,加入如下一行: URIEncoding=”GBK” 完整的应如下: <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/> 2)重启tomcat,一切OK。
      

  19.   

    你提交请求是在dopost()中还是否doget()中啊.
    如果用其中一个的话,需要在另一个里调用一下其方法.
    看你提交表单的时候用的是post,所以你回到servlet中看看就知道了.
      

  20.   

    在脚本里面转换一下字符集就好了。  var upFile = "D:\luceneData\M1\BBS\MyBBS\upload\日本語.txt" 
      function down() { 
          document.forms[0].action = "do_download.jsp?delFile="+ encodeURIComponent(upFile); //调用了encodeURIComponent()方法
          document.forms[0].method = "post"; 
          document.forms[0].submit(); 
        }