UnicodeDecodeError:' ascii'编解码器不能解码位置5中的字节0xcc

时间:2017-02-25 05:15:42

标签: python-3.x

我正在尝试使用以下代码读取文件。

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帖子中遵循了建议的解决方案,但无法解决它。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分: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')