我正在尝试将字符串转换为字节,并且这些字节必须为字符串类型。我知道如何在pyhon3中做到这一点,这很简单,但是在python2中,我只是迷路了:(
我已经尝试了python2中的encode()函数,但是它似乎不起作用,我读到python2中没有字节类型之类的东西,所以也许是我失败的原因。
无论如何,我是用python3编写此代码的,它可以完美地工作:
>>> a="hey"
>>> b=bytes(a, 'utf-8')
>>> print(b)
b'hey'
>>> type(b)
<class 'bytes'>
>>> c=''
>>> for i in b:
... c+=str(i)+" "
...
>>>
>>> print (c)
104 101 121
我尝试使用python2代替了字节数(a,'utf-8'),但这是说str()恰好采用了一个参数(给定2)。 然后我尝试了encode()和bytearray(),但是两者都没有运气。
如果您对如何获取python2中104 101 121
的代表字节ehy
的任何提示,或者您确定无法进行此“转换”,请告诉我。
答案 0 :(得分:1)
在Python 2中无需进行此类转换,因为bytes
只是Python 2中str
的别名。
Python 2.6将
bytes
添加为同义词str
类型,并且还支持b''
表示法。2.6
。str
与3.0字节不同 以各种方式打字;最为显着地, 构造函数是完全 不同。在3.0中,bytes([65, 66, 67])
长3个元素,其中包含 代表ABC
的字节;在2.6中,bytes([65, 66, 67])
返回 代表str()
的12个字节的字符串 列表中的2.6中
bytes
的主要用法是 是写这样的对象类型的测试 为isinstance(x, bytes)
。这将 帮助2to3
转换器, 告诉2.x代码是否打算使用字符串 包含字符或8位 字节;您现在可以使用bytes
或str
代表您的意图 确切地,结果代码将 在Python 3.0中也是正确的。
如果您希望Python 2中bytes
的Python 3行为能够以整数形式遍历字节,则可以将字符串转换为bytearray
(请记住, bytearray
与str
和bytes
不同,它是可变的):
>>> a = 'hey'
>>> b = bytearray(a)
>>> c = ''
>>> for i in b:
... c += str(i) + ' '
...
>>> print(c)
104 101 121
或者,您可以使用ord
函数将每个字符转换为其序数:
>>> for c in 'hey':
... print ord(c)
...
104
101
121