Python bytes类型介绍、Python3与2字符串的区别、Python3与2编码总结

                                   Python bytes类型介绍

  • Python 2 —— bytes类型

1 >>> s = "路飞"
2 >>> print s
3 路飞
4 >>> s
5 '\xe8\xb7\xaf\xe9\xa3\x9e'

      虽说打印的是路飞,但直接调用变量s,看到的却是一个个的16进制表示的“二进制字节”,我们如何称呼这样的数据呢?直接叫“二进制”?可以的,但相比与0101000111,这个“数据串”在表现形式上又把2进制转成了16进制来表示,这是为什么呢?为的就是让人们看起来更可读。我们称之为bytes类型,即字节类型。它把8个二进制一组称为byte,用16进制来表示。

1 >>> type(s)
2 <type 'str'>
3 >>> bytes
4 <type 'str'>
5 >>> s = "路飞"            #定义"路飞"    
6 >>> s1 = b"路飞"        #定义“\xc2\xb7\xb7\xc9”
7 >>> s1
8 '\xc2\xb7\xb7\xc9'

  Python2中的字符串更应该称为字节串,我们通过存储方式就能看出来,但Python2中还有一个类型是bytes。在Python2作用,bytes==str,就是这么回事。

  • 图片没有字符编码

 

                                      Python3与2字符串的区别

  • 图片在内存中的显示

    f = open('课程介绍.png') 
    a = f.read()
    a

          

         

  • 如何让 Python2 实现 写一个软件,在全球各国的电脑上直接看?

          以 unicode 编码写你的软件

     python2里还有个单独的类型是unicode , 把字符串解码后,就会变成unicode

1 >>> s
2 '\xe8\xb7\xaf\xe9\xa3\x9e' #utf-8
3 >>> s.decode('utf-8')
4 u'\u8def\u98de'           #unicode 在unicode编码表里对应的位置
5 >>> print(s.decode('utf-8'))
6 路飞                             #unicode 格式的字符

                                      Python3与2编码总结

  •  Python 发展历史

         由于Python创始人在开发初期认知的局限性,其并未预料到python能发展成一个全球流行的语言,导致其开发初期并没有把支持全球各国语言当做重要的事情来做,所以就轻佻的把ASCII当做了默认编码。 当后来大家对支持汉字、日文、法语等语言的呼声越来越高时,Python于是准备引入unicode,但若直接把默认编码改成unicode的话是不现实的, 因为很多软件就是基于之前的默认编码ASCII开发的,编码一换,那些软件的编码就都乱了。所以Python 2 就直接 搞了一个新的字符类型,就叫unicode类型,比如你想让你的中文在全球所有电脑上正常显示,在内存里就得把字符串存成unicode类型。

1 >>> s = "路飞"
2 >>> s
3 '\xe8\xb7\xaf\xe9\xa3\x9e'
4 >>> s2 = s.decode("utf-8")
5 >>> s2
6 u'\u8def\u98de'
7 >>> type(s2)
8 <type 'unicode'>

       到了2008年,python发展已近20年,创始人龟叔越来越觉得python里的好多东西已发展的不像他的初衷那样,开始变得臃肿、不简洁、且有些设计让人摸不到头脑,比如unicode 与str类型,str 与bytes类型的关系,这给很多python程序员造成了困扰。
      龟叔再也忍不了,像之前一样的修修补补已不能让Python变的更好,于是来了个大变革,Python3横空出世,不兼容python2,python3比python2做了非常多的改进,其中一个就是终于把字符串变成了unicode,文件默认编码变成了utf-8,这意味着,只要用python3,无论你的程序是以哪种编码开发的,都可以在全球各国电脑上正常显示了。
      PY3 除了把字符串的编码改成了unicode, 还把str 和bytes 做了明确区分, str 就是unicode格式的字符, bytes就是单纯二进制了。

为什么在py3里,把unicode编码后,字符串就变成了bytes格式? 你直接给我直接打印成gbk的字符展示不好么?

就是想通过这样的方式明确的告诉你,想在py3里看字符,必须得是unicode编码,其它编码一律按bytes格式展示。

 

  • 常见编码错误的原因有:

        1、Python解释器的默认编码

        2、Python源文件文件编码

        3、Terminal使用的编码

        4、操作系统的语言设置

      掌握了编码之前的关系后,挨个排错就好了

  • 将 utf-8编码 转换为 GBK编码(轻易不要转换编码,因为转编码是不可逆的)

猜你喜欢

转载自www.cnblogs.com/wqq0723/p/9541123.html
今日推荐