2017-02-25 28 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です。私が知っているピクルスファイルはPython 2のプログラムで書かれていたので、最初に理解できませんでした。

this answerのおかげでこの問題が解決しました。だから、latin1はバイト値0-255を最初の256個のUnicodeコードポイントに直接マップするので、latin1はどんな入力に対しても機能するため、pickle.load()の機能はlatin1に設定されています。

だから、私のために働いた!

precomputed = pickle.load(open('test/vgg16_features.p', 'rb'), encoding='latin1') 
関連する問題