常用编码格式介绍

编程过程中经常会遇到各类字符的编码方式,经常会混淆,在此总结下常用的编码方式以及其原理。

Ascii

  因为对于计算机来说只能识别01这两种字符(0表示低电平,1表示高电平),所有的数据都是通过二进制来表示,对于其他的比如说34sz#等字符用二进制表示就需要一个约定的规范,这就是ascii的由来。

  Ascii码表是用1个字节来表示128种字符(一个字节8位,可以组成256种字符,首位默认为0,所以ASCII最多就128个字符,当首位为1的时候我们后面再讨论),其中0-31127表示控制字符,他们是不可见字符。

  32-126是可见字符,48-57表示0-965-9026个大写英文字母,97-12226个小写英文字母。

 

GBK:

  现在英文和数字都有了,但是我们中国汉字怎么表示呢?此时GBK应运而生,上面我们得知ASCII首位为0,假如把它改成1,就表示中文。GBK2个字节来表示,第一个字节的最高位是0则表示字母和数字,假如是1则表示中文。

 

Unicode

  Unicode则是收录了世界上所有的语言, 但是在运用过程种会出现很多问题,比如一个3个字节的字符,如何区分他是1unicode还是3asicii,还有假如使用unicode,英文字母高位都会设置成0,这就造成了很大的浪费。因此UTF-8UTF-16UTF-32就出现来解决这些问题,主要讲当前互联网上常用的UTF-8

UTF-8

  UTF-8的规则很简单就两条:

  1、 对于单字节的字符,最高位为0,其实跟ascii表示一致

  2、 对于n个字节的字符,第一个字节的最高位为n1,第n+1设为0,后面每个字节的前两位都为10,剩下的用字符对应的unicode来表示,如下图

  Unicode符号范围 | UTF-8编码方式
  (十六进制) | (二进制)
  --------------------+---------------------------------------------
  0000 0000-0000 007F | 0xxxxxxx
  0000 0080-0000 07FF | 110xxxxx 10xxxxxx
  0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
  0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

 

BCD

  BCD编码主要用于数字0-9的压缩,因为0-9二进制表示为0000 00000000 1001,它们的前4位都是0,把他们合并就生成一个新的字符。

比如2个字符’1’,’9’他们对应的Ascii0x310x39,因此表示形式则为2个字节0x31 0x39

假如用BCD格式来表示则将其数字对应的二进制前4位去掉,然后合并,即将00000001000010014位去掉得到0001 1001,得到新的1个字节0x19,这样看起来就跟十进制一样,这就是BCD压缩码的原理。

 

Base64编码:

  Base64编码的作用是将ascii里面的不可见字符变成可见字符来传输。Base64编码的最小使用单元是4个字节,每个字节使用6位,假如不足6的整数倍,则后面补0,剩下的字符补=,因为计算机存储字节是8位,所以计算字符值时在前面补20

 可能说的有些绕,看下一张图就了解了

(借用网上的一张图片 http://www.cnblogs.com/caoyc/p/5794720.html

以A为例补位之后第一个字节为010000,前面补0得到00010000,对应10进制为16,对照字符表得到Q,第二个字节一样,也是Q,然后base64编码最小是4个字节,后面两个字节补=,最终得到QQ==

 

 

下面是一个Base64字符集,它包含大写字母、小写字母和数字,以及“+”和“/”符号。

 

posted @ 2019-05-07 16:44  小鸡蛋白  阅读(1932)  评论(0编辑  收藏  举报