zoukankan      html  css  js  c++  java
  • Python bytes类型介绍、Python3与2字符串的区别、Python3与2编码总结

                                       Python bytes类型介绍

    • Python 2 —— bytes类型

    1 >>> s = "路飞"
    2 >>> print s
    3 路飞
    4 >>> s
    5 'xe8xb7xafxe9xa3x9e'

          虽说打印的是路飞,但直接调用变量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"路飞"        #定义“xc2xb7xb7xc9”
    7 >>> s1
    8 'xc2xb7xb7xc9'

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

    • 图片没有字符编码

     

                                          Python3与2字符串的区别

    • 图片在内存中的显示

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

              

             

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

              以 unicode 编码写你的软件

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

    1 >>> s
    2 'xe8xb7xafxe9xa3x9e' #utf-8
    3 >>> s.decode('utf-8')
    4 u'u8defu98de'           #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 'xe8xb7xafxe9xa3x9e'
    4 >>> s2 = s.decode("utf-8")
    5 >>> s2
    6 u'u8defu98de'
    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编码(轻易不要转换编码,因为转编码是不可逆的)

  • 相关阅读:
    LeetCode 258 Add Digits
    LeetCode 231 Power of Two
    LeetCode 28 Implement strStr()
    LeetCode 26 Remove Duplicates from Sorted Array
    LeetCode 21 Merge Two Sorted Lists
    LeetCode 20 Valid Parentheses
    图形处理函数库 ImageTTFBBox
    php一些函数
    func_get_arg(),func_get_args()和func_num_args()的用法
    人生不是故事,人生是世故,摸爬滚打才不会辜负功名尘土
  • 原文地址:https://www.cnblogs.com/wqq0723/p/9541123.html
Copyright © 2011-2022 走看看