美文网首页
python2&3中str和byte区别

python2&3中str和byte区别

作者: D_Major | 来源:发表于2019-04-25 18:06 被阅读0次
    a = '王'
    >>> a
    '\xe7\x8e\x8b'
    >>> len(a)
    3
    >>> type(a)
    <type 'str'>
    >>> print a
    王
    # a.decode(), 默认为ASCII码会报错,需:
    >>> a.decode('utf-8')
    u'\u738b'  # 解码为unicode码
    

    即python2输入汉字自动按utf-8(unicode)编码成字节流, 但对于a这个对象还是当做str来看, print的时候也会对字节流做处理. 当喂给bytes_feature时需要decode成utf-8(unicode)

    >>> val
    'Lines:\nI lost\nKevin '
    >>> len(val)
    20
    >>> type(val)
    <class 'numpy.str_'>
    >>> re.split("[ \n]", val.strip())
    ['Lines:', 'I', 'lost', 'Kevin']
    #  当输入为英文字符串时
    >>> x = re.split("[ \n]", val.strip())[0]
    >>> x
    'Lines:'
    >>> type(x)
    <class 'str'>
    >>> len(x)
    5
    >>> x.encode('ascii')
    b'Lines:'
    >>> x.encode('utf-8')
    b'Lines:'
    # 当输入字符为汉字时
    >>> x = '王'
    >>> x
    '王'
    >>> type(x)
    <class 'str'>
    >>> len(x)
    1
    >>> x.encode('utf-8')
    b'\xe7\x8e\x8b'
    

    可见在python3中, 对英文字符串默认使用ASCII码进行编码, 对汉字默认使用utf-8进行编码, 二者均视为str类型, 对每一个字符char看做一个个体, 长度len()取决于字符数量. 但是进行编码时就可发现英文字符串只是加了一个b'', 中文是直接编码成两字节十六位的utf-8编码(即unicode), 使用三字节模板则为三个十六进制数.
    这是因为utf-8前127位包含ASCII码, 所以对英文使用utf-8编码来说是一样的

    相关文章

      网友评论

          本文标题:python2&3中str和byte区别

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