Python 2和3中的字符串到字节

时间:2015-04-20 15:13:06

标签: python string binary type-conversion

我的函数需要将输入作为字符串或二进制数据(例如,从文件中读取)。如果是字符串,我想将其转换为原始数据(bytesbytearray)。

在Python 3中,我可以data = bytes(data, 'utf8')。但是,这在Python 2中失败了,因为它只需要一个参数。反之亦然,data = bytes(data)适用于Python 2,但不适用于Python 3,因为它抱怨需要编码才能工作。

为了论证,让我们说所有输入,如果它是一个字符串,是UTF-8编码。那么有更好的方法来实现我正在寻找的东西而不是以下的怪物:

try:
  data = bytes(data, 'utf8')
except:
  data = bytes(data)

n.b。,data.encode()在Py3中工作,但在字符串包含非ASCII字节的情况下在Py2中失败。

3 个答案:

答案 0 :(得分:3)

您可以使用sys.version_info检查版本:

if sys.version_info < (3, 0):
    data = bytes(data)
else:
    data = bytes(data, 'utf8')

它比依赖例外更加pythonic。

答案 1 :(得分:3)

这两个版本均适用。即python 2和python 3

data = bytes(str(data).encode("utf-8"))

答案 2 :(得分:1)

如果您使用六个py2 / 3兼容性库,则可能更喜欢:

import six
data = bytes(data) if six.PY2 else bytes(data, 'utf8')