Python - 编解码

文章目录

    • 关于编解码
    • 编码的种类


关于编解码

编码/解码本质上是一种映射
a 用ascii编码则是65,计算机中存储的就是 00110101
但是显示的时候不能显示 00110101,还是要显示’a’,计算机就需要解码

编码:真实字符与二进制串的对应关系,真实字符 → 二进制串
解码:二进制串与真实字符的对应关系,二进制串 → 真实字符



编码的种类

  • ASCII 占1个字节,只支持英文
  • GB2312 占2个字节,支持6700+汉字
  • GBK GB2312的升级版,支持21000+汉字,中文2个字节。
  • Unicode 2-4字节 已经收录136690个字符
  • UTF-8: 使用1、2、3、4个字节表示所有字符;
    优先使用1个字符、无法满足则使增加一个字节,最多4个字节。英文占1个字节、欧洲语系占2个、东亚占3个,其它及特殊字符占4个。中文3个字节。
  • UTF-16: 使用2、4个字节表示所有字符;
    优先使用2个字节,否则使用4个字节表示。

ASCII 以1字节8个bit位表示一个字符,首位全是0,表示的字符集明显不够

unicode编码系统是为表达任意语言而设计的,为了防止存储上的冗余(比如,对应ascii码的部分),其采用了变长编码,但变长编码给解码带来了困难,无法判断是几个字节表示一个字符

UTF-8是针对unicode变长编码设计的一种前缀吗,根据前缀可判断是几个字节表示一个字符


Python2 中默认是ASCII码
Python3 中默认是unicode


UTF-8 --> decode 解码 --> Unicode

Unicode --> encode 编码 --> GBK / UTF-8 等


if __name__ == '__main__':

    str = '你好'  # b'\xe4\xbd\xa0\xe5\xa5\xbd'   gbk:b'\xc4\xe3\xba\xc3'
    str = 'abc'  # b'abc'
    str = 'นั่ง'   # b'\xe0\xb8\x99\xe0\xb8\xb1\xe0\xb9\x88\xe0\xb8\x87'
    str = 'นั่'  # b'\xe0\xb8\x99\xe0\xb8\xb1\xe0\xb9\x88'
    # str = 2 # 'int' object has no attribute 'encode'
    str = '*' # b'*'
    a = str.encode('UTF-8')
    a = str.encode('gbk')

    print(a)
    print(type(a))  # 

你可能感兴趣的:(Python,python)