python3中字符串和字节之间的变化

时间:2015-01-18 04:37:03

标签: python string python-3.x unicode bytearray

在python 2.7中:

>>> x1= '\xba\xba'
>>> x2=b'\xba\xba'
>>> x1==x2
True

在python 3.4中:

>>> x1='\xba\xba'
>>> x2=b'\xba\xba'
>>> x1==x2
False
>>> type(x1)
<class 'str'>
>>> type(x2)
<class 'bytes'>
  1. 如何将x1更改为x2
  2. 如何将x2更改为x1

2 个答案:

答案 0 :(得分:1)

在Python 3.x中,使用str.encode(str - &gt; bytes)和bytes.decode(bytes - &gt; str)和latin1编码(或iso-8859-1):

>>> x1 = '\xba\xba'
>>> x2 = b'\xba\xba'
>>> x1.encode('latin1') == x2
True
>>> x2.decode('latin1') == x1
True

答案 1 :(得分:1)

在Python 2中,x1x2都是字节串。如果比较Python 2上的Unicode和字节;在这种情况下你也会得到False

>>> u'\xba\xba' == b'\xba\xba'
__main__:1: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
False

x1是Python 3中的Unicode字符串。

您可以添加from __future__ import unicode_literals以使代码在Python 2和3上的工作方式相同:

>>> from __future__ import unicode_literals
>>> x1 = '\xab\xab'
>>> type(x1)
<type 'unicode'>

不要混用字节串和Unicode字符串。

将Unicode字符串转换为字节:

bytestring = unicode_string.encode(character_encoding)

将字节转换为Unicode字符串:

unicode_string = bytestring.decode(character_encoding)