zoukankan      html  css  js  c++  java
  • 常用编码格式介绍

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

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

  • 相关阅读:
    POJ 3253 Fence Repair
    POJ 2431 Expedition
    NYOJ 269 VF
    NYOJ 456 邮票分你一半
    划分数问题 DP
    HDU 1253 胜利大逃亡
    NYOJ 294 Bot Trust
    NYOJ 36 最长公共子序列
    HDU 1555 How many days?
    01背包 (大数据)
  • 原文地址:https://www.cnblogs.com/xiaojidanbai/p/10826472.html
Copyright © 2011-2022 走看看