我想序列化我的对象ancd-encode((decode((,以管理字节/字符串格式。我尝试创建这个类:
class test(object):
def __init__(self,uid):
self.uid.uid
此时,实例化对象并序列化它:
inst_a = test(1)
pickle.dumps(inst_a)
返回
b'x80x04x95$x00x00x00x00x00x00x00x8cx08__main__x94x8cx04testx94x93x94)x81x94}x94x8cx03uidx94Kx01sb.'
全部完成。现在我会从字节转换为字符串,但当我这样做时:
pickle.dumps(ins_a).decode()
我得到
Traceback(最后一次调用(:文件"<pyshell#11>";,第1行,在pickle.dumps(a(.decode((UnicodeDecodeError:"utf-8"编解码器无法解码位置0中的字节0x80:无效的起始字节
为什么会这样?如何对序列化对象进行解码/编码,以便将其从字节转换为字符串,反之亦然?
非常感谢
pickle.dumps
创建了一个字节数组对象(用b'...'
表示(,该对象不必是有效的Unicode字符串,因此在这样的字节数组上的decode
方法可能会失败,因为它对您来说失败了。
通常,pickle.dumps
中的字节数组不应被解释为字符串。它是pickle
模块的内部表示,不能保证在任何编码中都是有效的字符串(尤其是Unicode编码(。
如果您的意图是将拾取的对象转换回原始对象,则对pickle.dumps
的结果使用pickle.loads
方法。当然,您可以将其写入文件/读取到介于两者之间的文件(这是典型的用例(。