泛谈几种编码方式

0x00 ASCII码

由来:为了国家之间能够通信,必须使用统一的编码方式,于是美国有关的标准化组织就出台了ASCII编码,统一规定了常用符号用哪些二进制数来表示。
ASCII码采用指定的7位或8位二进制数来表示128或256种可能的字符。标准ASCII码用7位二进制数(剩下一位是0)来表示所有大写,小写英文字母,数字0-9,标点符号以及在美式英语中使用的特殊控制字符。
前128个是标准ASCII码。0-31及127(共33个)是控制字符或通信专用字符;32-126(共95个)是字符(32是空格),其中48-57为0到9十个阿拉伯数字;65-90是26个大写英文字母,97-122是26个小写英文字母,剩下的是一些标点符号、运算符号等。
后128个是扩展ASCII码。是在原来ASCII码 的基础上,把原本统一设置为0的字节最高位用来存储字符数据。许多基于x86的系统都支持使用扩展ASCII。扩展ASCII 码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号。很多国家的扩展ASCII码不一样。

0x01 Unicode码

由于ASCII码基本只对英文字符做了编码,字符太少,中国用GB2312对简体汉字进行了编码,别的国家也有自己的编码方式,为了方便交流,防止乱码,Unicode码应运而生。
Unicode码用2个字节来存储一个字符,所以最多可以对65536(2^16)个字符进行编码,但是相对于ASCII码来说,更占用空间,造成空间浪费。

0x02 UTF-8编码

它是Unicode的实现方式,是一种可变字节的编码方式,用1-4个字节来表示一个字符。如果Unicode字符由2个字节表示,则编码成UTF-8很可能需要3个字节。而如果Unicode字符由4个字节表示,则编码成UTF-8可能需要6个字节。

0x03 BASE64编码

把3个字符变成4个字符,原本一个字符对应8位二进制数,base64编码截取6位进行编码,如果二进制数不是3的倍数,就要在结尾加上1个或2个0,在编码后的字符串后面添加1个或2个等号“=”,表示所添加的零值字节数。解码的时候,会自动去掉。
在这里插入图片描述
优点:可以将二进制数据转换成可打印字符,方便传输数据;对数据进行简单的加密,肉眼安全。
缺点:内容编码后的体积会变大,编码和解码需要额外的工作量。

它的使用场景有很多,比如将图片等资源文件以Base64编码形式直接放于代码中,使用的时候反Base64后转换成Image对象使用;有些文本协议不支持不可见字符的传递,只能转换成可见字符来传递信息。有时在一些特殊的场合,大多数消息是纯文本的,偶尔需要用这条纯文本通道传一张图片之类的情况发生的时候,就会用到Base64,比如多功能Internet 邮件扩充服务(MIME)就是用Base64对邮件的附件进行编码的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值