我在url中想传汉字到后台中,前台js
 
   var url = 'login.do?method=test&name=测试';
   var encodeUrl=encodeURI(url);
   window.open(encodeUrl);后台action类中URLEncoder.encode(laf.getName(), "UTF-8")进行解码,可是去不到我传入的参数。在actionform中的name也是乱码。请问该如何解决编码问题

解决方案 »

  1.   

    不知lz的网页是怎么设置的?
    因为, 我在firefox试过, 发现: encodeURI(url) 函数 和 html 的charset
    有关系, 如果不指定, 好像用的是 8859-1/gb2312编码, 不是 utf-8, 比如:
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    ....
    </html>加上这个后再看看 laf.getName() 是不是正确的数据
      

  2.   

    我在页面上用了utf-8了,还是laf.getName()乱码
      

  3.   


    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>用户登录</title>
    </head>
    <script type="text/javascript">
     function a(){
        alert("enter the a!");
        var name="zhanghai";
        //window.test.action="login.do?method=test&name="+name;
        //window.test.submit();
        var url = 'login.do?method=test&name=测试';
        var encodeUrl=encodeURI(url);
        var enUrl=encodeURIComponent(url);
        alert(encodeUrl);
        alert('enUrl='+enUrl);
        alert('enUrl22='+decodeURIComponent(enUrl));
        window.open(encodeUrl);
        
     }
    </script>
    <body>
    <h1>用户登录</h1>
    <hr>
    <form action="login.do?method=test" method="post" id="test">
    用户:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    <input type="button" value="登录" onclick="a()">
    </form>
    </body>
    </html>
      

  4.   

    使用java.net.URLEncoder.encode()可以对要传递的中文进行编码a.在传参数之前先把参数进行转码:java.net.URLEncoder.encode(param);
    取值时用语句java.net.URLDecoder.decode(param);再转回中文
    b.在你的Tomcat目录-->conf目录-->server.xml里找出这段:
           <Connector 
             port="8080"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="100"
                   debug="0" connectionTimeout="20000" 
                   disableUploadTimeout="true"
    <!--在里边加上这个参数-->
    URIEncoding="gb2312"
         />简单示例程序如下:<%@ page contentType="text/html;charset=gb2312" %><a href="ds.jsp?url=<%=java.net.URLEncoder.encode("编码的是这里","GB2312")%>">点击这里</a>
    <%
    //request.setCharacterEncoding("GBK");
    if(request.getParameter("url")!=null)
    {str=request.getParameter("url");
    str=java.net.URLDecoder.decode(str,"GB2312");
    str=new String(str.getBytes("ISO-8859-1"));
    out.print(str);
    }%>JSP经过上面的处理之后,最后输出的HTML页面联结已经可以正常向服务器传递中文参数了。下面我们阐述一下Servlet里怎么接收/解析中文参数。对于<a href="/someServlet?key=%E4%BD%A0%E5%A5%BD">你好</a>之类的联结,我们可以用下面的servlet来解析传递过来的中文参数。
    GetAsiaCharServlet.javaview plaincopy to clipboardprint?
    import java.io.IOException;   
    import java.net.URLEncoder;   
      
    import javax.servlet.ServletException;   
    import javax.servlet.http.HttpServlet;   
    import javax.servlet.http.HttpServletRequest;   
    import javax.servlet.http.HttpServletResponse;   
      
    public class GetAsiaCharServlet extends HttpServlet {   
             
                 
          @Override  
          //redir?key=xxxx   
          protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {   
              String key = req.getParameter("key");   
                 
              key = <SPAN style="COLOR: #ff0000">new String(key.getBytes("ISO-8859-1", "utf-8"))</SPAN>;   
                 
          System.out.println(keyword);   
          //...   
      
          //重定向处理   
          //res.sendRedirect("http://www.google.com/search?q="+URLEncoder.encode(key, "utf-8"));   
          }   
    }  import java.io.IOException;
    import java.net.URLEncoder;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;public class GetAsiaCharServlet extends HttpServlet {
          
              
          @Override
          //redir?key=xxxx
          protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
              String key = req.getParameter("key");
              
              key = new String(key.getBytes("ISO-8859-1", "utf-8"));
              
          System.out.println(keyword);
          //...      //重定向处理
          //res.sendRedirect("http://www.google.com/search?q="+URLEncoder.encode(key, "utf-8"));
          }
    }我们注意到使用req.getParameter("key")得到参数后,还使用了new String(key.getBytes("ISO-8859-1", "utf-8"))把ISO-8859-1字符集形式转换成UTF-8形式。
    为什么呢?因为iso-8859-1是Java中网络传输使用的标准字符集,req.getParameter("key")得到的还是ISO-8859-1字符集,所以要转换一下才不会是乱码。最后,顺便提一下,采用servlet重定向时,也需要对包含中文文字的参数做特殊处理。
    例如,SERVLET从HTML页面的联结接受参数,然后重新定向到Google搜索。
    则可以在上面的GetAsiaCharServlet里加上如下处理:
    res.sendRedirect("http://www.google.com/search?q="+URLEncoder.encode(key, "utf-8"));也就是说,需要把参数取出来,转换,再重新使用URLEncoder.encode编码,这样就不会出现乱码现象。本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wjtzlj/archive/2009/04/27/4128790.aspx
      

  5.   


    var url = 'login.do?method=test&name='+encodeURI("测试");
    window.open(url );
      

  6.   

    这个问题,我前几天也遇见过。问题已经解了。在你的tomcat的server.xml里,找到connector port=8009......> 里,加上URIEncoding="UTF-8"。形如:
    <Connector enableLookups="false" port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>这样的,就可以了。屡试不爽。
      

  7.   

     name = new String(laf.getName().getBytes("iso-8859-1"), "utf-8");
      

  8.   

    name=new String(name.getBytes("ISO-8859-1"),"gbk");
    或者
    name=new String(name.getBytes("ISO-8859-1"),"utf-8");
    试试~~~~~~
      

  9.   

    str=java.net.URLDecoder.decode(str,"GB2312"); 
      

  10.   

    web乱码
    http://blog.csdn.net/crazylaa/archive/2009/12/24/5066784.aspx