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

String to bytes in both Python 2 and 3

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

在Python3中,我可以做到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 中失败。

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

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

它比依赖异常更 pythonic。

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

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

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

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