在 python3 中的字符串和字节之间切换

change between string and bytes in python3

在 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

在 Python 3.x 中,使用带有 latin1 编码(或 iso-8859-1)的 str.encode (str -> bytes) and bytes.decode(字节 -> str):

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

x1x2都是Python中的bytestrings 2.如果比较Unicode和bytes在Python2中;在这种情况下,您还会得到 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 中的 Unicode 字符串 3.

您可以添加 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)