use*_*508 29 python string random byte python-3.x
如果我调用os.urandom(64),我会得到64个随机字节.参考将字节转换为Python字符串,我尝试过
a = os.urandom(64)
a.decode()
a.decode("utf-8")
Run Code Online (Sandbox Code Playgroud)
但得到了回溯错误,说明字节不在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
Run Code Online (Sandbox Code Playgroud)
用字节
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'
Run Code Online (Sandbox Code Playgroud)
是否有一种全面的方法将这些字节解码为一些字符串表示?我正在生成sudo随机令牌以跟踪多个数据库引擎中的相关文档.
use*_*508 54
下面的代码适用于Python 2.7和3:
from base64 import b64encode
from os import urandom
random_bytes = urandom(64)
token = b64encode(random_bytes).decode('utf-8')
Run Code Online (Sandbox Code Playgroud)
Rob*_*tts 14
您可以使用base-64编码.在这种情况下:
a = os.urandom(64)
a.encode('base-64')
Run Code Online (Sandbox Code Playgroud)
另外请注意,我使用encode而不是在这里decode,作为decode正试图把它从你指定为Unicode任何格式.因此,在您的示例中,您将随机字节视为形成有效utf-8字符串,而随机字节很少会出现这种情况.
你有随机字节; 如果对字符串进行解码,我会感到非常惊讶.
如果你必须有一个unicode字符串,从Latin-1解码:
a.decode('latin1')
Run Code Online (Sandbox Code Playgroud)
因为它将字节一对一映射到相应的Unicode代码点.
| 归档时间: |
|
| 查看次数: |
26020 次 |
| 最近记录: |