kapok

垃圾桶,嘿嘿,我藏的这么深你们还能找到啊,真牛!

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  455 随笔 :: 0 文章 :: 76 评论 :: 0 Trackbacks
http://rabbit8.blogchina.com/blog/article_144619.789425.html
Java中的URLEncoder和URLDecoder类
2005年 02月02日
为了解决DisplayTag的问题,可能要使用这2个类了,本篇继续分析URL编码的问题

以下内容是我翻译的JDK的帮助。

URLEncoder类:

用于HTML的form中数据编码的类。

这个类包含将字符串转换为application/x-www-form-urlencoded MIME 格式的静态方法.

如果想了解HTML的编码细则,请参考HTML规范。

编码规则如下:

字符"a"-"z","A"-"Z","0"-"9",".","-","*",和"_" 都不被编码,维持原值,

空格" "被转换为加号"+"。

所有其他的字符都被认为是不安全的,首先都根据指定的编码scheme被转换为1个或者多个字节。[凭什么认为其他的字符都是不安全的?看来这些规范的制订者中没有中国人呀!]

然后每个字节都被表示成"%xy"格式的由3个字符组成的字符串,xy是字节的2位16进制的表达(xy is the two-digit hexadecimal representation of the byte),推荐的编码scheme为UTF-8,然而,出于兼容性的考虑,如果没有制定编码的scheme,那么将使用当前操作系统的编码的scheme。

如:如果编码scheme是UTF-8,

"The string ü@foo-bar"将被转换为"The+string+%C3%BC%40foo-bar" 。

因为载UTF-8中字符ü被编码成2个字节C3 (十六进制) 和BC (十六进制), 字符@被编码成一个字节40 (十六进制)。

起始于:JDK1.0

 

这个类共有2个重载方法:

public static String encode(String s,  String enc)  throws UnsupportedEncodingException。起始于:JDK1.4

和即将被废弃的方法:public static String encode(String s)。(因为这个方法的编码的字符集依赖于程序运行的系统的默认的字符集)。

第一个方法的作用是:根据指定的encode scheme 将一个字符串翻译成application/x-www-form-urlencoded格式。

注意: W3C推荐UTF-8。

参数:

s - 将要被翻译的字符串。

enc - 编码用的character。

 返回:翻译后的字符串。

抛出异常: UnsupportedEncodingException - 如果不支持制定的编码

起始于:1.4

另请参考:URLDecoder.decode(java.lang.String, java.lang.String)

 

类URLDecoder的作用和URLEncoder的作用相反,方法类似,这里就不再赘述了。

      如果你想知道你的字符串被编码后的值是什么样,你可以打开www.baidu.com,然后输入你要编码后的数值,然后提交,你可以在地址栏看到你被编码后的字符串,这个方法是Jason告诉我的,呵呵!

如果想解决DisplayTag的问题,就要修改源代码了,下一步就是读源代码,头疼ing......

 

                                                                                                           兔八哥

                                                                                                   2005-2-2下午16:30

ltf_ty 于16 : 01 发表 已被浏览249次 评论(3) / 引用(0) 加入博采中心
     [回复]
   

在百度提交:The string ü@foo-bar
并不是您说的结果.

    匿名网友 | 2005年 02月05日 16 : 58


     回复 [回复]
   

请看:http://rabbit8.blogchina.com/blog/article_144619.859489.html

    兔八哥 | 2005年 02月16日 08 : 51


     [回复]
   

不错不错,附上实现代码
static String HEX_DIGITS =  "0123456789ABCDEF";
   protected static String urlEncode( byte[] rs )
   {
       StringBuffer result = new StringBuffer();

       // Does the URLEncoding.  We could use the java.net one, but
       // it does not eat byte[]s.

       for( int i = 0; i < rs.length; i++ )
       {
           char c = (char) rs[i];

           switch( c )
           {
             case '_':
             case '.':
             case '*':
             case '-':
               result.append( c );
               break;

             case ' ':
               result.append( '+' );
               break;

             default:
               if( (c >= 'a' && c <= 'z') ││
                   (c >= 'A' && c <= 'Z') ││
                   (c >= '0' && c <= '9') )
               {                    
                   result.append( c );
               }
               else
               {
                   result.append( '%' );
                   result.append( HEX_DIGITS.charAt( (c & 0xF0) >> 4 ) );
                   result.append( HEX_DIGITS.charAt( c & 0x0F ) );
               }
           }

       } // for

       return result.toString();
   }

posted on 2005-03-09 00:18 笨笨 阅读(3102) 评论(1)  编辑  收藏 所属分类: ALLAppFuse

评论

# re: Java中的URLEncoder和URLDecoder类 2015-07-07 13:54 sadf
asdfsdf  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: