pickle和编码的问题

3 投票
1 回答
4070 浏览
提问于 2025-04-16 11:55

我正在处理一大堆文本文件。这些文件有很多是用不同的编码写的。我创建了一个对象列表,这些对象包含了这些文本文件中的一些子字符串。在打开文件的时候,我已经解决了编码的问题(对象创建得很正确,可以正常使用)。

len(hands)
47580
type(hands)
<class 'list'>
type(hands[0])
<class '__main__.BridgeHand'>

现在我尝试把这个对象进行序列化(也就是把它保存成文件):

import pickle
pickle.dump(hands, open("handspi.p", "wb"))

这样就生成了一个9MB的文件,名字叫handspi。

问题出现在我尝试反序列化(也就是从文件中读取这个对象)的时候:

hh = pickle.load(open(#some path to this pickle file))

错误信息的最后部分是:

File "C:\Python31\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 30: character maps to      <undefined>

我该怎么处理这个问题呢?谢谢大家的帮助 :)

1 个回答

9

你可以试着以二进制模式打开这个文件,因为你现在是把它当作ASCII文件来读取的。

open('picklefile.pkl','rb')

撰写回答