Python序列化对象和解码返回一个无效的起始字节错误



我想序列化我的对象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方法。当然,您可以将其写入文件/读取到介于两者之间的文件(这是典型的用例(。

相关内容

最新更新