url encode 和 decode

URL,中文名是统一资源定位符,是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。URL不是单单为了HTTP协议而定义的,而是网络上的所有的协议都可以使用。

基本URL包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名,如“协议://授权/路径?查询”。完整的、带有授权部分的普通统一资源标志符语法看上去如下:协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名。

URL设计者使用US-ASCII字符集表示URL,这样会带来什么问题呢?没错,汉字和特殊符号。我们看看下面的例子

package encodeTest;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

/**
 * @author wujiang
 * @version 1.0.0.
 * @date 2017/4/30
 */
public class encodeTest {
    public static void main(String[] args) {
        String[] strArray={"abc","人民的名义","http://www.csdn.net @ # &"};
        for(int i=0;i<strArray.length;i++){
            try {
                String encodeStr = URLEncoder.encode(strArray[i], "UTF-8");
                System.out.println(strArray[i]+" encode"+":"+encodeStr);

                String decodeStr = URLDecoder.decode(encodeStr, "UTF-8");
                System.out.println(strArray[i]+" decode"+":"+decodeStr);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }

    }
}

输出结果如下

abc encode:abc
abc decode:abc
人民的名义 encode:%E4%BA%BA%E6%B0%91%E7%9A%84%E5%90%8D%E4%B9%89
人民的名义 decode:人民的名义
http://www.csdn.net @ # & encode:http%3A%2F%2Fwww.csdn.net+%40+%23+%26
http://www.csdn.net @ # & decode:http://www.csdn.net @ # &

使用场景

URL的encode和decode,最常见的场景就是发送restful请求的时候了。如果一个url中的某一个参数是另一个url,不encode就会造成参数的不完整。举个例子,这个例子是我从https://segmentfault.com/q/1010000002991580看来的,很具有代表性

对于下面的微信接口

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

REDIRECT_URI代表一个本地运算之后的回调地址。比方说,REDIRECT_URI是”http://api.baidu.com/callback.php

回调地址必须先encode,变成下面的类型,才可以正确发送请求。

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=http%3A%2F%2Fapi.baidu.com%2Fcallback.php&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

说明
如有转载,请注明出处:
http://blog.csdn.net/antony9118/article/details/71036371

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值