前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >URL编码和Base64编码

URL编码和Base64编码

作者头像
木可大大
发布2018-07-25 15:10:28
3.2K0
发布2018-07-25 15:10:28
举报
文章被收录于专栏:木可大大木可大大

在理清字符集和字符编码关系一文中我们介绍了常见字符集以及字符编码之间的关系,本期我们继续朝着这个方向介绍常见的编码算法。

URL编码

URL编码是浏览器发送数据给服务器时使用的编码,它是编码算法,而不是加密算法,URL编码的目的是把任意文本数据编码为以%前缀表示的文本,编码后的文本仅包含A~Za~z,0~9以及-_.*,这样做便于浏览器和服务器处理,比如,<%3C表示。为了帮助大家理解,举一个更加具体的例子,一条完整的URL是"http://www.mukedada.com/login?username=admin&password=123456?remark=管理员",它的URL编码是http%3A%2F%2Fwww.mukedada.com%2Flogin%3Fusername%3Dadmin%26password%3D123456%3Fremark%3D%E7%AE%A1%E7%90%86%E5%91%98,我们发现除了英文字母、数字之外都变成了以%开头,由于一个中文以3个字节表示,所以管理员用9个%xx表示。

Java代码如下:

代码语言:javascript
复制
String origin = URL;
String encoded = URLEncoder.encode(origin, "UTF-8");
System.out.println(encoded);
String ori = new String(URLDecoder.decode(encoded, "UTF-8"));
System.out.println(ori);

Base64编码

我们知道电子邮件协议是文本协议,如果我们要在电子邮件中添加二进制文件,此时就可以通过Base64编码将二进制文件转换成文本,否则就会出现乱码现象。

Base64编码是一种将二进制数据用文本表示的编码算法,它只包含64个字符,如下所示:

代码语言:javascript
复制
['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']

对应的索引分别从0到63。由于Base64只能展示64种文本字符,因此对于二进制数据,它就需要一套映射机制来实现将二进制数据转换成文本数据,即选取3个字节为一组,进行重新分组:每6个bit为一个新的字节,形成4组,如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。

由于将原先的3个字节变成4个字节,也就是说长度增加了33%,因此,传输效率降低了,目前我们通过将Base64应用于传输少量二进制数据的常见中,例如Cookie、URL等。

Java代码如下:

代码语言:javascript
复制
String origin = "编码测试!";
String encoded = java.util.Base64.getEncoder().encodeToString(origin.getBytes());
System.out.println(encoded);

输出结果是57yW56CB5rWL6K+VIQ==,末尾有两个=说明补充了2个\x00字节。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 木可大大 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • URL编码
  • Base64编码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档