用java.net.URLEncoder.encode("中文")就不回出现这个问题了

解决方案 »

  1.   

    通过这两天各位高手对我的回答,我综上总结一下(加上我亲自的测试,呵呵)
    问题是这样的,t1.jsp  t2.jsp 都将通过url传递一个name参数到t3.jsp
    t1.jsp
    ------------------------
    <%@ page contentType="text/html;charset=gb2312"%>
    <a href="t2.jsp?name=汪浩">go</a>
    ----------------------------t2.jsp
    ---------------------------------
    <%@ page contentType="text/html;charset=gb2312"%>
    <jsp:forward page="t2.jsp?name=汪浩"/>
    ---------------------------------t3.jsp
    -------------------------------------
    <%@ page contentType="text/html;charset=gb2312"%>
    <%
    String name=request.getParameter("name");
    out.print("name="+name);
    %>
    ---------------------------------
    在t3.jsp显示的时候经常出现一些所谓的乱码,或者匪夷所思的文字
    经过大家的建议为了正常显示
    t3.jsp必须这么写
    ------------------------------------------------------
    <%@ page contentType="text/html;charset=gb2312"%>
    <%
    String name=request.getParameter("name");
    name =  new String(name.getBytes("ISO8859-1"),"gb2312");
    out.print("name="+name);
    %>
    -----------------------------------------------------------
    这样从t1.jsp传递name到t3.jsp就会显示正常的中文不过t1.jsp做如下修改也能正常显示
    t1.jsp
    --------------------------------------------------------
    <%@ page contentType="text/html;charset=gb2312"%>
    <%@ page import="java.net.*"%>
    <%String url="t2.jsp?name="+URLEncoder.encode("汪浩");%>
    <a href="<%=url%>">go</a>
    --------------------------------------------------------
    而为了让从t2.jsp传递的中文值参数到t3.jsp也能正常显示,必须做如下修改t2.jsp
    ---------------------------------
    <%@ page contentType="text/html;charset=gb2312"%>
    <%@ page import="java.net.*"%>
    <%String url="t2.jsp?name="+URLEncoder.encode("汪浩");%>
    <jsp:forward page="<%=url%>"/>
    ---------------------------------这是通过大家总结出来的,不过至于为什么就不太清除了,也许是因为java是外国人发明的原因吧(tmd没办法)
      

  2.   

    我通常是用<form>把中文传过去.
    好象用xxx.jsp?abc=中文 就会有问题!!!
      

  3.   

    给2个函数,我用得很爽,不过不是在JSP里,可能你也会用得很爽,
    /**
     * 将经转换的字串还原
     */
    public static String unToTrueAsciiStr(String str){
    byte[] bt = str.getBytes();
    int i,l=0,length = bt.length,j=0;
    for(i = 0;i< length;i++){
    if(bt[i] == 0){
    l++;
    }
    }
    byte []bt2 = new byte[length -l];
    for(i =0 ;i< length;i++){
    if(bt[i] == 0){
    i++;
                                   // if (i > length -1  || j > length -1) break;
                                   // MachinePeer.println("i:"+i+" j:"+j+" length:"+length);
    bt2[j] = bt[i];
    }else{
    bt2[j] = (byte)(bt[i]|0x80);
    }
    j++;
    }
    String tt = new String(bt2);
    return tt;
    }
    /**
     * 将中英文字串转换成纯英文字串
     */
    public static String toTrueAsciiStr(String str){
    StringBuffer sb = new StringBuffer();
    byte[] bt = str.getBytes();
    for(int i =0 ;i< bt.length;i++){
    if(bt[i]< 0){
    //是汉字去高位1
    sb.append((char)(bt[i]&0x7f));
    }else{//是英文字符 补0作记录
    sb.append((char)0);
    sb.append((char)bt[i]);
    }
    }
    return sb.toString();
    }