Python 2 和 3 中的字符串到字节
String to bytes in both Python 2 and 3
我的函数需要将输入作为字符串或二进制数据(例如,从文件中读取)。如果它是一个字符串,我想将其转换为原始数据(bytes
或 bytearray
)。
在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"))
我的函数需要将输入作为字符串或二进制数据(例如,从文件中读取)。如果它是一个字符串,我想将其转换为原始数据(bytes
或 bytearray
)。
在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"))