美文网首页python技巧
unicode字符和byte字符的理解

unicode字符和byte字符的理解

作者: 陆_志东 | 来源:发表于2018-09-06 21:05 被阅读0次

    在python2中有两种字符类型: str(bytes)unicode , 系统默认 str(bytes)
    在python3中也有两种字符类型: bytesstr(unicode) 系统默认 str(unicode)

    在编码界,每种编码都有一张编码表,记录的是对应的字符与数字的对应关系.
    我们所看到程序显示的字符都是编码表映射的字符,在计算机世界里其实就是一串数字
    简单理解就是:字节是计算机的语言,字符串是人类语言,它们之间通过编码表形成一一对应的关系
    字节也叫做字节数组是二进制数据组成的序列, 1字节 == 8bit == 2位16进制数 == 数字0~255
    ASCII编码占用一字节,且只用到了一字节中的一部分(31~27)

    unicode和bytes的转换

    unicode --encode--> bytes
    bytes --decode--> unicode

    1bytes(字节) = 8位二进制位(bit)
    二进制位的数值只有0和1,也就是说8位0或1组成一字节(bytes)
    其实bytes就是ASCII码

    中文和字母在不同编码中占用的字节

    英文字母:
    
    字节数 : 1;编码:GB2312
    
    字节数 : 1;编码:GBK
    
    字节数 : 1;编码:GB18030
    
    字节数 : 1;编码:ISO-8859-1
    
    字节数 : 1;编码:UTF-8
    
    字节数 : 4;编码:UTF-16
    
    字节数 : 2;编码:UTF-16BE
    
    字节数 : 2;编码:UTF-16LE
    
     
    
    中文汉字:
    
    字节数 : 2;编码:GB2312
    
    字节数 : 2;编码:GBK
    
    字节数 : 2;编码:GB18030
    
    字节数 : 1;编码:ISO-8859-1
    
    字节数 : 3;编码:UTF-8
    
    字节数 : 4;编码:UTF-16
    
    字节数 : 2;编码:UTF-16BE
    
    字节数 : 2;编码:UTF-16LE
    

    代码示例: python3环境

    英文字符在unicode和bytes的区别
    s1 = "aaa"
    print(type(s1),len(s1))
    >><class 'str'> 3
    b1 = s1.encode("utf-8")
    b2 = b"aaa"
    print(type(b1),type(b2),b1==b2,len(s1)==len(b2))
    >><class 'bytes'> <class 'bytes'> True True
    

    上面的示例可以看出英文字符在unicode和bytes中占相同的字节

    中文字母
    s1 = "中"
    print(type(s1),len(s1))
    >><class 'str'> 1
    b1 = s1.encode("utf-8")
    # b2 = b"中文" # 注意不能这样写,这样写是会报错的 
    print(type(b1),b1,len(b1))
    >><class 'bytes'> b'\xe4\xb8\xad' 3
    

    上面的示例其实就可以看出,python3默认使用unicode字符,采用的默认编码是utf-8,以及一个中文占3个字节长度,所以在转换编码传输的时候要注意数据的真正长度

    相关文章

      网友评论

        本文标题:unicode字符和byte字符的理解

        本文链接:https://www.haomeiwen.com/subject/chjxgftx.html