美文网首页
python字符串编码和解码

python字符串编码和解码

作者: Xyxtank | 来源:发表于2019-06-28 16:00 被阅读0次

    一、字符串编码和解码方法

    Python3中,默认写的字符串都是unicode类型,unicode是一个万能的字符集,可以存储任意的字符,但是unicode字符串只能在内存中存在,不能在磁盘和网络间传输数据,如果要在文件或者网络间传输数据,必须要将unicode转换为bytes类型的字符串,因此我们在写代码的时候有时候要对unicodebytes类型字符串进行转换,转换的函数如下:

    • encode('utf-8'):将unicode编码成bytes类型,并且编码方式采用的是utf-8
    list_1 = 'Welcome To Beijing 小明'
    print(list_1.encode('utf-8'))
    
    b'Welcome To Beijing \xe5\xb0\x8f\xe6\x98\x8e'
    
    • decode('utf-8'):将bytes解码成unicode类型,并且解码的方式采用的是utf-8
    text=b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x95\x8a \xe5\xb0\x8f\xe6\x98\x8e'
    print(text.decode('utf-8'))
    
    你好啊 小明
    

    二、ASCII、GBK、Unicode和UTF-8编码之间的关系

    • ASCII:由于历史原因,在Python2版本中,默认的字符串编码采用的是ascii编码(Python早于unicode发布)。而ascii编码是采用1个字节来存储,也就是8位,最多只能表示2^8也即256个字符,这在全世界远远是不够的,单拿中国汉字来讲,常用的汉字也有6000多个。
    • GBK:对于拉丁语系国家来说通过扩展最高位,单字节表示所有的字符已经绰绰有余,但是对于亚洲国家来说一个字节就显得捉襟见肘了。于是中国人自己弄了一套叫 GB2312 的双字节字符编码,又称GB0,1981 由中国国家标准总局发布。GB2312 编码共收录了6763个汉字,同时他还兼容 ASCII,不过 GB2312 还是不能100%满足中国汉字的需求,对一些罕见的字和繁体字 GB2312 没法处理,后来就在GB2312的基础上创建了一种叫 GBK 的编码,GBK 不仅收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。同样 GBK 也是兼容 ASCII 编码的,对于英文字符用1个字节来表示,汉字用两个字节来标识。
    • unicode:GBK仅仅只是解决了中国自己的问题,但是计算机不止是美国人和中国人用,全世界还有很多国家存在此类问题,于是,为了满足全球各个国家不同语言的编码需求,全球统一码联盟提出了unicode编码。unicode编码默认情况下会采用2个字节存储字符(UCS-2),这样能够存储的2^16也即65536个字符,但也还是不能满足全世界所有语言,因此后来又补充了用4个字节存储(UCS-4),这就可以包含全球所有的文字了。
    • UFT-8:虽然unicode包含了全球所有的文字,但是它也带来了问题,因为Unicode将大部分的字符都用2个字节存储,但是对于英文字母,比如a,其实他只需要一个字节就够了,如果都用2个字节存储,那么比较浪费硬盘空间或者浪费流量,因此unicode并不适合用来存储。而utf-8则是unicode的一种实现方式,他默认会使用8位,也就是一个字节存储,如果存储不下了,则会动态的改变大小用来存储字符。因此utf-8比较节省空间,并且也可以包含全世界所有的字符。

    相关文章

      网友评论

          本文标题:python字符串编码和解码

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