八、编码的初识和进阶

一、编码的初识

计算机存储文件,存储数据,以及将一些数据信息通过网络发送出去,存储发送数据什么内容?底层都是01010101.

编码相当于密码本

最早的密码本:

  • ASCII码:只包含:英文字母,数字,特殊字符。

    0000 0001 : a

    0000 0101 : b

    8bit (位)== 1byte(字节)

    'hello123': 8byte

  • gbk: 英文字母,数字,特殊字符和中文。国标

    一个英文字母: 0000 0001 :                   a  1字节

    一个中文 中: 0000 0001 0100 0001 :   中 2字节

  • Unicode: 万国码:把世界上所有的文字都记录到这个密码本。

    起初一个字符用2个字节表示:

    0000 0001 0000 0011:                             a 2字节

    0000 0001 0100 0001 :                           中 2字节

    后来为了涵盖全部文字:

    0000 0001 0000 0011 0000 0001 0000 0011:  a 4字节

    0000 0001 0100 0001 0000 0001 0000 0011: 中 4字节

    浪费空间,浪费资源。

  • Utf-8:升级:最少用8bit1个字节表示一个字符。

    0000 0011                                                  a 1字节

    ​0000 0011 0000 0011                                欧洲 2个字节

    0000 0011 0000 0011 0000 0011              中: 3个字节

重点:

'中国12he' : GBK: 8个字节

'中国12he' : UTF-8: 10个字节

 

8bit = 1byte
1024byte = 1KB
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB
1024TB = 1PB
1024TB = 1EB
1024EB = 1ZB
1024ZB = 1YB
1024YB = 1NB
1024NB = 1DB

比如:7.6MB ----> 7.6 * 1024 * 1024 * 8 bits

8bit (位)= 1byte(字节)       即1个字节=8个位

 

 

二、编码的进阶

  1. 不同的密码本之间能否互相识别? 不能

  2. 数据在内存中全部是以Unicode编码的,但是当你的数据用于网络传输或者存储到硬盘中必须是以非Unicode编码(utf-8,gbk等等)

  1. bytes

    • 英文:

      str: 'hello '

      ​ 内存中的编码方式: Unicode

      ​ 表现形式: 'hello'

      bytes :

      ​ 内存中的编码方式: 非Unicode

      ​ 表现形式:b'hello'

    • 中文:

      str:


      内存中的编码方式: Unicode

      表现形式:'中国'

      bytes :

      内存中的编码方式: 非Unicode # Utf-8

      表现形式:b'\xe4\xb8\xad\xe5\x9b\xbd'  
    • str ---> bytes 编码

      s1.encode('utf-8')

      s1.encode('gbk')


      #str ---> bytes
      s1 = '中国'
      b1 = s1.encode('utf-8')  # 编码
      print(b1,type(b1))  
      # b'\xe4\xb8\xad\xe5\x9b\xbd'

      b1 = s1.encode('gbk')  # 编码
      # b'\xd6\xd0\xb9\xfa' <class 'bytes'>
    • bytes ---> str 解码

      (用什么编码编过去的,就是用什么编码解回来,否则报错)

      b1.decode('utf-8')


      b1 = b'\xe4\xb8\xad\xe5\x9b\xbd'
      s2 = b1.decode('utf-8')  # 解码
      print(s2)
      #中国
    • gbk---> utf-8

      先把gbk转化为Unicode,然后由Unicode转化为utf-8


      # gbk ---> utf-8
      b1 = b'\xd6\xd0\xb9\xfa'
      s = b1.decode('gbk')
      # print(s)   #中国(Unicode)
      b2 = s.encode('utf-8')
      print(b2)  # b'\xe4\xb8\xad\xe5\x9b\xbd'

       

posted on 2019-05-02 23:07  雨后清明  阅读(214)  评论(0编辑  收藏  举报

导航