编码方式示例:
   public   static  String escape(String src) {    
        int  i;    
        char  j;    
       StringBuffer tmp =  new  StringBuffer();    
       tmp.ensureCapacity(src.length() *  6 );    
        for  (i =  0 ; i < src.length(); i++) {    
           j = src.charAt(i);    
            if  (Character.isDigit(j) || Character.isLowerCase(j)    
                   || Character.isUpperCase(j))    
               tmp.append(j);    
            else   if  (j <  256 ) {    
               tmp.append( "%" );    
                if  (j <  16 )    
                   tmp.append( "0" );    
               tmp.append(Integer.toString(j,  16 ));    
           }  else  {    
               tmp.append( "%u" );    
               tmp.append(Integer.toString(j,  16 ));    
           }    
       }    
        return  tmp.toString();    
   }解码方式示例:
    public   static  String unescape(String src) {    
       StringBuffer tmp =  new  StringBuffer();    
       tmp.ensureCapacity(src.length());    
        int  lastPos =  0 , pos =  0 ;    
        char  ch;    
        while  (lastPos < src.length()) {    
           pos = src.indexOf( "%" , lastPos);    
            if  (pos == lastPos) {    
                if  (src.charAt(pos +  1 ) == 'u') {    
                   ch = ( char ) Integer.parseInt(src    
                           .substring(pos +  2 , pos +  6 ),  16 );    
                   tmp.append(ch);    
                   lastPos = pos +  6 ;    
               }  else  {    
                   ch = ( char ) Integer.parseInt(src    
                           .substring(pos +  1 , pos +  3 ),  16 );    
                   tmp.append(ch);    
                   lastPos = pos +  3 ;    
               }    
           }  else  {    
                if  (pos == - 1 ) {    
                   tmp.append(src.substring(lastPos));    
                   lastPos = src.length();    
               }  else  {    
                   tmp.append(src.substring(lastPos, pos));    
                   lastPos = pos;    
               }    
           }    
       }    
        return  tmp.toString();    
   }  

解决方案 »

  1.   

    本帖最后由 net_lover 于 2012-02-02 17:35:52 编辑
      

  2.   

    特别注意java和c#的substring的参数含义是不一样的。public static string escape(string src)
        {
            int i;
            char j;
            StringBuilder tmp = new StringBuilder();
            for (i = 0; i < src.Length; i++)
            {
                j = src[i];
                if (Char.IsDigit(j) || Char.IsLower(j)
                || Char.IsUpper(j))
                    tmp.Append(j);
                else if (j < 256)
                {
                    tmp.Append("%");
                    if (j < 16)
                        tmp.Append("0");
                    tmp.Append(((int)j).ToString("X"));
                }
                else
                {
                    tmp.Append("%u");
                    tmp.Append(((int)j).ToString("X"));
                }
            }
            return tmp.ToString();
        }
        public static string unescape(string src)
        {
            StringBuilder tmp = new StringBuilder();
            int lastPos = 0, pos = 0;
            char ch;
            while (lastPos < src.Length)
            {
                pos = src.IndexOf("%", lastPos);
                if (pos == lastPos)
                {
                    if (src[pos + 1] == 'u')
                    {
                        ch = (char)Convert.ToInt32(src.Substring(pos + 2, 4), 16);
                        tmp.Append(ch);
                        lastPos = pos + 6;
                    }
                    else
                    {
                        ch = (char)Convert.ToInt32(src
                        .Substring(pos + 1, 2), 16);
                        tmp.Append(ch);
                        lastPos = pos + 3;
                    }
                }
                else
                {
                    if (pos == -1)
                    {
                        tmp.Append(src.Substring(lastPos));
                        lastPos = src.Length;
                    }
                    else
                    {
                        tmp.Append(src.Substring(lastPos, pos - lastPos));
                        lastPos = pos;
                    }
                }
            }
            return tmp.ToString();
        }