2017-06-02 54 views
0

我有一個包含非ASCII字符的路徑醃文件:如何在路徑中存在非ascii字符時解除文件夾?

D:/sämple_dürectory/31.0mm_e_e1.oes

正如你可以看到,這是在Windows機器上。當我嘗試unpickle它,我得到一個編碼錯誤:

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實際上也使用泡菜,所以顯然必須有辦法如何做到這一點。

+2

你確定文件名是問題,而不是醃文件的內容?你可以在同一條路徑上使用一個簡單的(無字符串)文件嗎? –

+1

哦,無字符串文件也可以。這似乎真的像我的文件的問題。非常感謝您的提示! –

+0

不用擔心。我不熟悉酸洗,但[pickle.load'的編碼'](https://docs.python.org/3/library/pickle.html#pickle.load)似乎是相關的。 –

回答

1

問題不在於路徑,而是醃文件的問題。

也許你與Python的一個版本醃製的嘗試與另一個unpickle?

嘗試這樣的設置醃製對象的編碼(僅當您使用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() 
相關問題