如题

解决方案 »

  1.   

     
     方法: 
    http://10.1.2.2/ysxy/mytest.jsp?p1=<%=java.net.URLEncoder.encode("阿卡洒洒")%> ------------------------- 
    方法二: 
    String p1=transCode(p1,"GBK"); 
    <%! 
    protected String transCode(String value,String enc) 

    try{ 
    if (value==null) 

    return null; 

    else 

    value=value.trim(); 
    value=new String(value.getBytes("ISO8859_1"),enc); 
    return value; 


    catch(Exception e) 
    {return null; 


    %> 
     
      

  2.   

    学习了。不过1楼的这样的做法,是不是到了下一个action取得这些中文
    信息的时候还要转换回来啊?
      

  3.   

    encodeURI('啦啦啦')action中不用转换
      

  4.   

    如果用得Tomcat的话,lz在server.xml的<port=8081.....URIEncoding="gb2312" />,加上红色字体,重启Tomcat,就ok啦!
      

  5.   

    1楼和5楼的方法都可以~不过建议楼主还是最好不要用url传汉字~因为有的时候换台机子可能就不好使了~
    所以建议一下楼主尽可能用别的东西来代替一下要传递的汉字~比如说设定一个标志什么的~
      

  6.   

    传的时候随便传就行了,但是传过去之后要解码。
    http://localhost:8088/cs/value.jsp?aa="中文"%> //传值
    Stirng aa=(request.getParameter("aa")+"").trim();//取值
    aa=new String((aa).getBytes("ISO-8859-1"),"GBK");//解码,第一个参数Iso-8859-1指的是现在的编码方式,而第二个参数是要转换成的目标编码方式因为网页往往默认编码是Iso-8859-1,而汉字简体编码是gb2312,简繁体是gbk。
      

  7.   

    例如:1:form表单action="Encoder.encodURL('show.jsp')"
      

  8.   

    传的时候就如楼上诸位所说 要先encode();
    到了那个action 或者jsp要先解码 但必须都是同种编码的 例如都用utf-8
    但是 最好不要实用地址栏传递中文 要穿中文 在地址栏中传最简单的方法是把中文变成
    十六进制的有%的编码就可以直接穿了 可以用记事本来变换字符的进制。
      

  9.   

    我知道的也是两中方法:就是5楼和14楼说的:
    1.如果用得Tomcat的话,在server.xml的Connector 这里加上<port=8081.....URIEncoding="gb2312" />,重启Tomcat,就ok啦!
    2.aa=new String((aa).getBytes("ISO-8859-1"),"GBK");不过不建议在地址栏上传中文,如果是连数据库的话,可以传递相关的主键过去,然后通过查询相关字段。
      

  10.   

    // Bridge pattern -- Structural example  
    using System;// "Abstraction"
    class Abstraction
    {
      // Fields
      protected Implementor implementor;  // Properties
      public Implementor Implementor
      {
        set{ implementor = value; }
      }  // Methods
      virtual public void Operation()
      {
        implementor.Operation();
      }
    }// "Implementor"
    abstract class Implementor
    {
      // Methods
      abstract public void Operation();
    }// "RefinedAbstraction"
    class RefinedAbstraction : Abstraction
    {
      // Methods
      override public void Operation()
      {
        implementor.Operation();
      }
    }// "ConcreteImplementorA"
    class ConcreteImplementorA : Implementor
    {
      // Methods
      override public void Operation()
      {
        Console.WriteLine("ConcreteImplementorA Operation");
      }
    }// "ConcreteImplementorB"
    class ConcreteImplementorB : Implementor
    {
      // Methods
      override public void Operation()
      {
        Console.WriteLine("ConcreteImplementorB Operation");
      }
    }/**//// <summary>
    /// Client test
    /// </summary>
    public class Client
    {
      public static void Main( string[] args )
      {
        Abstraction abstraction = new RefinedAbstraction();    // Set implementation and call
        abstraction.Implementor = new ConcreteImplementorA();
        abstraction.Operation();    // Change implemention and call
        abstraction.Implementor = new ConcreteImplementorB();
        abstraction.Operation();
      }
    }
      

  11.   

    URL后面的中文需要通过编码的方式。比如:你的页面是GB2312编码,那么就按照Gb2312的方式去编码。
    而如果你的页面是UTF-8的编码,那么就按照UTF-8的方式。例如:在百度和Google分别搜索“中文”两个字百度就是按照GB2312编码方式发送中文的。
    即:http://www.baidu.com/baidu?word=%D6%D0%CE%C4&tn=max2_cb而Google则是按照UTF-8发送中文的。
    即:http://www.google.cn/search?client=aff-cs-maxthon&forid=1&ie=utf-8&oe=UTF-8&hl=zh-CN&q=%E4%B8%AD%E6%96%87注意看红色部分,那些就是汉字“中文”,在以Gb2312和UTF-8的方式编码后的样子如何将中文转换为特定编码的URL编码呢?
    一:在客户端的JavaScript里的可以用这几个函数
    js对url文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent
    二:如果是通过服务器端返回数据给客户端,再有客户端给服务器端的话可以在服务器端用
    java.net.URLEncoder这个类
    三:手动编写下面是我原来从网上找的资料你看看吼~~
    《Java URL编码问题》因为在做链接来源统计的时候需要把 http://www.baidu.com/baidu?word=%D6%D0%B9%FA%B4%F3%B0%D9%BF%C6%D4%DA%CF%DF%C8%AB%CE%C4%BC%EC%CB%F7&tn=myie2dg  这类的URL还原成明文字串,一般大部分的网站都是用普通的URL编码形式,如上面链接中的badu,这种很容易转换和还原,Java包里提供了两个类的不同方法URLEncode.encode()和URLDecode.decode()可以很方便实现,但也有特别一点的就是Google了,http://www.google.com/search?hl=zh-CN&newwindow=1&q=%E4%B8%AD%E5%9B%BD%E5%A4%A7%E7%99%BE%E7%A7%91%E5%9C%A8%E7%BA%BF%E5%85%A8%E6%96%87%E6%A3%80%E7%B4%A2&btnG=%E6%90%9C%E7%B4%A2&lr= 他们的编码和别人不一样,如果使用URLDecode.decode()的话则变成乱码,查询的一些相关资料都说Google使用的是UTF-8编码,这点我就有些奇怪了,如果Google使用的是UTF-8编码,那别人使用的又是什么?IE的高级选项里不是有项“始终以UTF-8形式发送URL”的吗?但是UTF-8一个中文是3byte,而一般的编码则是2个byte,这就是为什么一般的URL中是以两组'%'代码表示一个汉字,如“中”的URL编码为"%D6%D0",而UTF-8则为3组,“中”为"%E4%B8%AD",这个问题我在Google里也没得到较好回答。我对各种编码形式了解的不是很好,之前只看过如何将字符串转成Utf8-URL编码的方法,其实也挺简单的,直接转成byte后直接取其16进制值前面加个%就行,还原方法在网上搜了几圈居然没发现有现成的!倒是也是几个人在CSDN问了此类的问题。最后还是决定自己搞定了,基本上是toUTF8的原路退回法,再加了个检测URL链接是否UTF-8形式的方法,觉得已经蛮好用了。可以拿出来share一下。
       import java.io.UnsupportedEncodingException;
                import java.net.URLEncoder;
                import java.net.URLDecoder;
                /**
                * <p>Title:字符编码工具类 </p>
                * <p>Description:  </p>
                * <p>Copyright: flashman.com.cn Copyright (c) 2005</p>
                * <p>Company: flashman.com.cn </p>
                * @author: jeffzhu
                * @version 1.0
                */
                public class CharTools {
                /**
                * 转换编码 ISO-8859-1到GB2312
                * @param text
                * @return
                */
                public String ISO2GB(String text) {
                String result = "";
                try {
                result = new String(text.getBytes("ISO-8859-1"), "GB2312");
                }
                catch (UnsupportedEncodingException ex) {
                result = ex.toString();
                }
                return result;
                }
                /**
                * 转换编码 GB2312到ISO-8859-1
                * @param text
                * @return
                */
                public String GB2ISO(String text) {
                String result = "";
                try {
                result = new String(text.getBytes("GB2312"), "ISO-8859-1");
                }
                catch (UnsupportedEncodingException ex) {
                ex.printStackTrace();
                }
                return result;
                }
                /**
                * Utf8URL编码
                * @param s
                * @return
                */
                public String Utf8URLencode(String text) {
                StringBuffer result = new StringBuffer();
                for (int i = 0; i < text.length(); i++) {
                char c = text.charAt(i);
                if (c >= 0 && c <= 255) {
                result.append(c);
                }else {
                byte[] b = new byte[0];
                try {
                b = Character.toString(c).getBytes("UTF-8");
                }catch (Exception ex) {
                }
                for (int j = 0; j < b.length; j++) {
                int k = b[j];
                if (k < 0) k += 256;
                result.append("%" + Integer.toHexString(k).toUpperCase());
                }
                }
                }
                return result.toString();
                }
                /**
                * Utf8URL解码
                * @param text
                * @return
                */
                public String Utf8URLdecode(String text) {
                String result = "";
                int p = 0;
                if (text!=null && text.length()>0){
                text = text.toLowerCase();
                p = text.indexOf("%e");
                if (p == -1) return text;
                while (p != -1) {
                result += text.substring(0, p);
                text = text.substring(p, text.length());
                if (text == "" || text.length() < 9) return result;
                result += CodeToWord(text.substring(0, 9));
                text = text.substring(9, text.length());
                p = text.indexOf("%e");
                }
                }
                return result + text;
                }
                /**
                * utf8URL编码转字符
                * @param text
                * @return
                */
                private String CodeToWord(String text) {
                String result;
                if (Utf8codeCheck(text)) {
                byte[] code = new byte[3];
                code[0] = (byte) (Integer.parseInt(text.substring(1, 3), 16) - 256);
                code[1] = (byte) (Integer.parseInt(text.substring(4, 6), 16) - 256);
                code[2] = (byte) (Integer.parseInt(text.substring(7, 9), 16) - 256);
                try {
                result = new String(code, "UTF-8");
                }catch (UnsupportedEncodingException ex) {
                result = null;
                }
                }
                else {
                result = text;
                }
                return result;
                }
                /**
                * 编码是否有效
                * @param text
                * @return
                */
                private boolean Utf8codeCheck(String text){
                String sign = "";
                if (text.startsWith("%e"))
                for (int i = 0, p = 0; p != -1; i++) {
                p = text.indexOf("%", p);
                if (p != -1)
                p++;
                sign += p;
                }
                return sign.equals("147-1");
                }
                /**
                * 是否Utf8Url编码
                * @param text
                * @return
                */
                public boolean isUtf8Url(String text) {
                text = text.toLowerCase();
                int p = text.indexOf("%");
                if (p != -1 && text.length() - p > 9) {
                text = text.substring(p, p + 9);
                }
                return Utf8codeCheck(text);
                }
                /**
                * 测试
                * @param args
                */
                public static void main(String[] args) {
                CharTools charTools = new CharTools();
                String url;
                url = "http://www.google.com/search?hl=zh-CN&newwindow=1&q=%E4%B8%AD%E5%9B%BD%E5%A4%A7%E7%99%BE%E7%A7%91%E5%9C%A8%E7%BA%BF%E5%85%A8%E6%96%87%E6%A3%80%E7%B4%A2&btnG=%E6%90%9C%E7%B4%A2&lr=";
                if(charTools.isUtf8Url(url)){
                System.out.println(charTools.Utf8URLdecode(url));
                }else{
                System.out.println(URLDecoder.decode(url));
                }
                url = "http://www.baidu.com/baidu?word=%D6%D0%B9%FA%B4%F3%B0%D9%BF%C6%D4%DA%CF%DF%C8%AB%CE%C4%BC%EC%CB%F7&tn=myie2dg";
                if(charTools.isUtf8Url(url)){
                System.out.println(charTools.Utf8URLdecode(url));
                }else{
                System.out.println(URLDecoder.decode(url));
                }
                }
                }
     
      

  12.   

    使用 JSTL,保证页面编码为 UTF-8,并在 Tomcat 的 server.xml 的 Connector 元素中加上 URIEncoding="utf-8"<c:url value="http://......" var="url">
      <c:param name="namea" value="张三">
      <c:param name="nameb" value="李四">
    </c:url><a href="${url}">链接</a>
      

  13.   

    上面写错了,c:param 需要有 / 来关闭
      

  14.   

    ie中
    在internet选项中的高级中有一个选项 使用发送utf-8url可解决中文问题。
      

  15.   

    直接把中文进行url编码就可以了
      

  16.   

    在js里用函数encodeURI()
    在php里用函数urlencode()
      

  17.   

    光是编辑站点时的设置URL就让我折腾了快一天
      

  18.   

    我靠,页面就能转的吧。。去Google一下URL encoding就好了
      

  19.   

    如果是urf-8编码的话,可以直接跟中文文件名,如果不是则需要转码
      

  20.   

    还不如先把中文转成:base64,到时候在转成中文,这样还简单些
      

  21.   

    乱码可以试下设置tomcat conf/server.xml 
        <Connector port="8080" maxHttpHeaderSize="8192" 
                  maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
                  enableLookups="false" redirectPort="38441" acceptCount="100" 
                  connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true" URIEncoding="UTF-8"/>