如果路径中有非ascii字符,如何取消文件?

时间:2017-06-02 10:08:36

标签: python encoding pickle

我在包含非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,所以显然必须有一种方法怎么做。

1 个答案:

答案 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()