python3使用pickle.load出现UnicodeDecodeError的解决办法

python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。

python2使用的是cPickle模块,而在python3中cPickle已经被取消,使用python2的如下方式:

import cPickle
data = cPickle.load(open('imdb_features.p'))

这种方式是可以正常读取文件的。
但是当换做python3的方式读取文件的时候,例如:

import pickle
data = pickle.load(open('imdb_features.p'))

获得错误提示信息,如下:

TypeError: ‘str’ does not support the buffer interface

其解决办法是应该指明用二进制方式打开文件,代码改为:

import pickle
data = pickle.load(open('imdb_features.p','rb'))

于是这时错误就变成了:

UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe8 in position 0: ordinal not in range(128)

其解决办法为:我们需要告诉pickle:how to convert Python bytestring data to Python3 strings,The default is to try and decode all string data as ASCII,所以代码改为:

import pickle
data = pickle.load(open('imdb_features.p','rb'),encoding = 'iso-8859-1')

问题得到最终解决。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sharon@zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值