• 常用编码格式介绍


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

    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字符集,它包含大写字母、小写字母和数字,以及“+”和“/”符号。

  • 相关阅读:
    *CodeForces 1325E
    CodeForces 1325D
    线性基
    分块
    RabbitMQ学习笔记(四、RabbitMQ队列)
    RabbitMQ学习笔记(三、生产者与消费者)
    RabbitMQ学习笔记(二、RabbitMQ结构)
    RabbitMQ学习笔记(一、消息中间件基础)
    SpringCloud学习笔记(十、SpringCloud Sleuth)
    SpringCloud学习笔记(九、SpringCloud Stream)
  • 原文地址:https://www.cnblogs.com/xiaojidanbai/p/10826472.html
Copyright © 2020-2023  润新知