java实现url转码、解码

来源:互联网 发布:淘宝进口食品货源 编辑:程序博客网 时间:2024/06/06 20:22

URL由来:

一般来说,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。比如,世界上有英文字母的网址 “http://www.abc.com”,但是没有希腊字母的网址“http://www.aβγ.com”(读作阿尔法-贝塔-伽玛.com)。这是 因为网络标准RFC 1738 做了硬性规定:

"...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL."

“只有字母和数字[0-9a-zA-Z]、一些特殊符号“$-_.+!*'(),”[不包括双引号]、以及某些保留字,才可以不经过编码直接用于 URL。”

这意味着,如果URL中有汉字,就必须编码后使用。但是麻烦的是,RFC 1738没有规定具体的编码方法,而是交给应用程序(浏览器)自己决定。这导致“URL编码”成为了一个混乱的领域。

下面就让我们看看,“URL编码”到底有多混乱。我会依次分析四种不同的情况,在每一种情况中,浏览器的URL编码方法都不一样。把它们的差异解释 清楚之后,我再说如何用Javascript找到一个统一的编码方法。

 

具体代码如下:(切记切记,一定要注意编码)

 

复制代码
package com.util;import java.io.UnsupportedEncodingException;/** * url转码、解码 * * @author lifq  * @date 2015-3-17 下午04:09:35 */public class UrlUtil {    private final static String ENCODE = "GBK";     /**     * URL 解码     *     * @return String     * @author lifq     * @date 2015-3-17 下午04:09:51     */    public static String getURLDecoderString(String str) {        String result = "";        if (null == str) {            return "";        }        try {            result = java.net.URLDecoder.decode(str, ENCODE);        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }        return result;    }    /**     * URL 转码     *     * @return String     * @author lifq     * @date 2015-3-17 下午04:10:28     */    public static String getURLEncoderString(String str) {        String result = "";        if (null == str) {            return "";        }        try {            result = java.net.URLEncoder.encode(str, ENCODE);        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }        return result;    }    /**     *      * @return void     * @author lifq     * @date 2015-3-17 下午04:09:16     */    public static void main(String[] args) {        String str = "测试1";        System.out.println(getURLEncoderString(str));        System.out.println(getURLDecoderString(str));            }}