我在包含非ascii字符的路径中有一个pickle文件:
D:/sämple_dürectory/31.0mm_e_e1.oes
如您所见,这是在Windows计算机上。当我尝试取消它时,我得到一个编码错误:
filename = 'D:/sämple_dürectory/31.0mm_e_e1.oes'
with open(filename, 'rb') as file_in:
loaded = pickle.load(file_in)
结果:
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-10-ff988755db3a> in <module>()
1 with open(filename, 'rb') as file_in:
----> 2 pickle.load(file_in)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xca in position 616: ordinal not in range(128)
奇怪的是,当我尝试在同一位置打开numpy
数组(.npy)时,这不是问题,即使numpy
实际上也使用了pickle,所以显然必须有一种方法怎么做。
答案 0 :(得分:1)
问题根本不是路径,而是腌制文件的问题。
也许你用一个版本的python腌制试图与另一个版本打开?
尝试设置pickle对象的编码(只有在使用python3时才有效),如下所示:
with open(filename, 'rb') as file_in:
d = pickle.load(file_in, encoding='latin1')
也许尝试其他编码!
编辑:
如果您使用的是python 2.7,请尝试:
with open(filename, 'rb') as file_in:
u = pickle._Unpickler(file_in)
u.encoding = 'latin1'
p = u.load()