zoukankan      html  css  js  c++  java
  • python2 与python3中最大的区别(编码问题bytes&str

     

    1,在python2.x 中是不区分bytes和str类型的,在python3中bytes和str中是区分开的,str的所有操作bytes都支持

    python2 中                                                    

    >>> s = "abcdefg"
    >>> b = s.encode()    #或者使用下面的方式

    >>> b = b"abcdefg"
    >>> type(b)
    <type 'str'>


    python3中     #str和bytes是严格区分的

    >>> s = "abcdefg"
    >>> type(s)
    <class 'str'>
    >>> b = b"abcdefg"
    >>> type(b)
    <class 'bytes'>


    str是文本系列,bytes是字节系列

    文本是有编码的(UTF-8,GBK,GB2312等)

    字节没有编码

    文本的编码指的是字符如何使用字节来表示组织方式,linux下默认都使用UTF-8



    2,bytes与str之间的转换-------编码

    bytes由str通过encode方法转化得到的,str也可以通过bytes 通过decode方法转化得到

    通过b前缀可以定义bytes

    GBK 是双字节,UTF-8 灵活编码,1字节,2字节,3字节,4字节都有,最大支持6字节长度,中文大多数是3字节


    >>> S = "我是中国人"
    >>> S
    '我是中国人'
    >>> b = S.encode()     #进行编码为bytes
    >>> b
    b'xe6x88x91xe6x98xafxe4xb8xadxe5x9bxbdxe4xbaxba'
    >>> b.decode()    #进行解码为字符串
    '我是中国人'
    >>>

    str被编码成什么格式的,就需要使用什么格式的编码进行解码

    >>> S = "我是中国人"
    >>> S
    '我是中国人'
    >>> b = S.encode('GBK')
    >>> b
    b'xcexd2xcaxc7xd6xd0xb9xfaxc8xcb'
    >>> b.decode('GBK')
    '我是中国人'


    可以使用bin( )将一个10进制整数或者16进制数转化为2进制

    >>> bin(10)
    '0b1010'
    >>>

    >>> bin(0xce)
    '0b11001110'


    3,bytes的操作

    bytes具有string类型的所有操作,bytes可以通过str encode转化,也可以通过前缀b定义

    >>> b = b'abc'
    >>> b
    b'abc'
    >>> b.decode()
    'abc'


    >>> b'abc'.find(b'c')
    2

    >>> len(('我是中国人').encode())      #求bytes的长度
    15
    >>> b
    b'abc'
    >>> b.hex()   #转化为16进制
    '616263'

    >>> bin(616263)      #转化为2进制
    '0b10010110011101000111'


    除了encode外,str操作都有对应的bytes版本,但是传入的参数必须是bytes


                                                                              
    bytearray类型

    bytearray是可变的,bytes和str是不可变的,主要用于图片处理

    相对bytes来说,多了insert,append,extend,pop,remove,clear,reverse等操作,并且支持索引操作


    >>> S1 = "人生苦短,我学python!"
    >>> S1
    '人生苦短,我学python!'
    >>> b1 = bytearray(S1.encode())
    >>> b1.decode()
    '人生苦短,我学python!'

    >>> b1
    bytearray(b'xe4xbaxbaxe7x94x9fxe8x8bxa6xe7x9fxadxefxbcx8cxe6x88x91xe5xadxa6pythonxefxbcx81')
    >>> b1[:6] = bytearray('生命'.encode())
    >>> S1
    '人生苦短,我学python!'
    >>> b1
    bytearray(b'xe7x94x9fxe5x91xbdxe8x8bxa6xe7x9fxadxefxbcx8cxe6x88x91xe5xadxa6pythonxefxbcx81')
    >>> b1.decode()
    '生命苦短,我学python!'
    >>>

    原文:https://blog.csdn.net/u010694764/article/details/53811035

  • 相关阅读:
    windows已经阻止此软件因为无法验证发行者解决方案
    vs用resharp如何调试到源码而不是对象浏览器
    Android环境变量的设置(详细图解版)
    js为xml添加节点和属性
    javascript操作xml文件综合实例
    js如何循环读取xml文件的节点
    游标的简单理解
    关于DATE函数datediff dateadd datename等
    分组数据where & having ,group by & order by
    SQL拼接字段,算数计算
  • 原文地址:https://www.cnblogs.com/fmgao-technology/p/9054802.html
Copyright © 2011-2022 走看看