如何将python urandom转换为字符串?

2024-06-02 19:59:13 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我调用os.urandom(64),就会得到64个随机字节。关于Convert bytes to a Python string我试过

a = os.urandom(64)
a.decode()
a.decode("utf-8")

但是得到了一个回溯错误,指出字节不在utf-8中。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 0: invalid start byte

带字节

b'\x8bz\xaf$\xb6\x93q\xef\x94\x99$\x8c\x1eO\xeb\xed\x03O\xc6L%\xe70\xf9\xd8
\xa4\xac\x01\xe1\xb5\x0bM#\x19\xea+\x81\xdc\xcb\xed7O\xec\xf5\\}\x029\x122
\x8b\xbd\xa9\xca\xb2\x88\r+\x88\xf0\xeaE\x9c'

有没有完整的方法将这些字节解码成一些字符串表示?我正在生成sudo随机令牌,以跟踪跨多个数据库引擎的相关文档。


Tags: toinmostconvertstring字节bytesos
3条回答

您可以使用base-64编码。在这种情况下:

a = os.urandom(64)
a.encode('base-64')

还要注意,我在这里使用的是encode,而不是decode,因为decode试图将它从您指定的任何格式转换为unicode格式。因此,在您的示例中,您将随机字节视为它们形成了一个有效的utf-8字符串,这种情况很少出现在随机字节中。

下面的代码适用于Python2.7和3:

from base64 import b64encode
from os import urandom

random_bytes = urandom(64)
token = b64encode(random_bytes).decode('utf-8')

你有随机字节;如果能解码成字符串,我会非常惊讶。

如果要使用unicode字符串,请从拉丁语-1解码:

a.decode('latin1')

因为它将字节一对一映射到相应的Unicode代码点。

相关问题 更多 >