字节到字符串到字节。 Python 3
Bytes to string to bytes. Python 3
这是一个简单的问题,但我似乎无法弄清楚。我想获取从 pickle.dumps()
输出的字节并将其转换为 str
并能够将其转换回 bytes
兼容,以便 pickle.loads(string_thing)
可以恢复原始对象。
encoded = pickle.dumps(None)
string_encoded = to_string(encoded)
decoded = pickle.loads(safe_decoder(string_encoded))
我知道反对意见之一是,"why do you need to do this?" 对允许类型的限制。
@deceze 给出了一个好主意:使用模块 base64
及其函数 .b64encode()
和 .b64decode()
.
这是一个例子:
>>> 'Álñó@'
'Álñó@'
>>> 'Álñó@'.encode()
b'\xc3\x81l\xc3\xb1\xc3\xb3@'
>>> base64.b64encode('Álñó@'.encode())
b'w4Fsw7HDs0A='
>>> base64.b64encode('Álñó@'.encode()).decode()
'w4Fsw7HDs0A='
现在你有一个 base64 格式的字符串。对于逆过程:
>>> base64.b64encode('Álñó@'.encode()).decode().encode()
b'w4Fsw7HDs0A='
>>> base64.b64decode(base64.b64encode('Álñó@'.encode()).decode().encode())
b'\xc3\x81l\xc3\xb1\xc3\xb3@'
>>> base64.b64decode(base64.b64encode('Álñó@'.encode()).decode().encode()).decode()
'Álñó@'
这对你有用吗?
示例使用 pickle
:
>>> original_obj = 456.5
>>> original_obj
456.5
>>> type(original_obj)
<class 'float'>
>>> intermediate_str = base64.b64encode(pickle.dumps(original_obj)).decode()
>>> intermediate_str
'gANHQHyIAAAAAAAu'
>>> new_obj = pickle.loads(base64.b64decode(intermediate_str.encode()))
>>> new_obj
456.5
>>> type(new_obj)
<class 'float'>
>>> original_obj == new_obj
True
这是一个简单的问题,但我似乎无法弄清楚。我想获取从 pickle.dumps()
输出的字节并将其转换为 str
并能够将其转换回 bytes
兼容,以便 pickle.loads(string_thing)
可以恢复原始对象。
encoded = pickle.dumps(None)
string_encoded = to_string(encoded)
decoded = pickle.loads(safe_decoder(string_encoded))
我知道反对意见之一是,"why do you need to do this?" 对允许类型的限制。
@deceze 给出了一个好主意:使用模块 base64
及其函数 .b64encode()
和 .b64decode()
.
这是一个例子:
>>> 'Álñó@'
'Álñó@'
>>> 'Álñó@'.encode()
b'\xc3\x81l\xc3\xb1\xc3\xb3@'
>>> base64.b64encode('Álñó@'.encode())
b'w4Fsw7HDs0A='
>>> base64.b64encode('Álñó@'.encode()).decode()
'w4Fsw7HDs0A='
现在你有一个 base64 格式的字符串。对于逆过程:
>>> base64.b64encode('Álñó@'.encode()).decode().encode()
b'w4Fsw7HDs0A='
>>> base64.b64decode(base64.b64encode('Álñó@'.encode()).decode().encode())
b'\xc3\x81l\xc3\xb1\xc3\xb3@'
>>> base64.b64decode(base64.b64encode('Álñó@'.encode()).decode().encode()).decode()
'Álñó@'
这对你有用吗?
示例使用 pickle
:
>>> original_obj = 456.5
>>> original_obj
456.5
>>> type(original_obj)
<class 'float'>
>>> intermediate_str = base64.b64encode(pickle.dumps(original_obj)).decode()
>>> intermediate_str
'gANHQHyIAAAAAAAu'
>>> new_obj = pickle.loads(base64.b64decode(intermediate_str.encode()))
>>> new_obj
456.5
>>> type(new_obj)
<class 'float'>
>>> original_obj == new_obj
True