2017-02-25 145 views
1

我正在嘗試使用以下代碼讀取文件。UnicodeDecodeError:'ascii'編解碼器無法解碼位置5中的字節0xcc

precomputed = pickle.load(open('test/vgg16_features.p', 'rb')) 
features = precomputed['features'] 

但是得到這個錯誤。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xcc in position 5: ordinal not in range(128) 

我想讀取的文件包含使用深度神經網絡提取的圖像特徵。文件內容如下所示。

(dp0 
S'imageIds' 
p1 
(lp2 
I262145 
aI131074 
aI131075 
aI393221 
aI393223 
aI393224 
aI524297 
aI393227 
aI393228 
aI262146 
aI393230 
aI262159 
aI524291 
aI322975 
aI131093 
aI524311 
.... 
.... 
.... 

請注意,這是一個大文件,大小爲2.8GB。

我知道這是一個重複的問題,但我遵循其他stackoverflow帖子中的建議的解決方案,但無法解決它。任何幫助,將不勝感激!

回答

3

最後我找到了解決方案。這個問題實際上大約是unpickling a python 2 object with python 3,我首先無法理解,因爲我得到的pickle文件是通過python 2程序編寫的。

感謝this answer解決了這個問題。所以,我需要做的就是將encoding參數pickle.load()函數設置爲latin1,因爲latin1適用於任何輸入,因爲它將字節值0-255直接映射到前256個Unicode代碼點。

所以,以下爲我工作!

precomputed = pickle.load(open('test/vgg16_features.p', 'rb'), encoding='latin1') 
相關問題