我该如何解决 "ascii' codec can't decode byte 0x9a in position 8: ordinal not in range(128)"? (python 3 中的 cPickle 问题)
how could I solve "ascii' codec can't decode byte 0x9a in position 8: ordinal not in range(128)"? ( A problem with cPickle in python 3)
我正在使用 python 3.x,我想 运行 下面的代码:
import cPickle
x = cPickle.load(open('s01.dat', 'rb'))
它在 python 2.x 中运行良好,但是当我在 python 3 中尝试时,出现此错误:
ModuleNotFoundError: No module named 'cPickle'
我在 Whosebug 中由其他 post 解决了它,并将我的代码更改为:
import _pickle as cPickle
x = cPickle.load(open('s07.dat', 'rb'))
我得到这个错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x9a in position
8: ordinal not in range(128)
我尝试通过更改编码来解决它:
import _pickle as cPickle
x = cPickle.load(open('s07.dat', 'rb',encoding='iso-8859-1'))
或
import _pickle as cPickle
x = cPickle.load(open('s07.dat', 'rb',encoding='utf-8'))
但我仍然收到此错误:
ValueError: binary mode doesn't take an encoding argument
我的 *.dat 文件包含两个数组,我希望导入它们!
我该如何克服这些问题?
首先,如果您尝试在 python3 中使用 pickle
,只需执行 import pickle
(它在可用时使用已编译的 cPickle)或 from six.moves import cPickle
如果您需要与 python2.
兼容
其次,您需要的编码选项是发送到 pickle.load
而不是 open
的编码选项。尝试:
x = cPickle.load(open('s07.dat', 'rb'), encoding='utf-8')
我的问题已通过使用@Macattack 的回答解决,如下所示:
import pickle
x = pickle.load(open('s07.dat', 'rb'), encoding='iso-8859-1')
我正在使用 python 3.x,我想 运行 下面的代码:
import cPickle
x = cPickle.load(open('s01.dat', 'rb'))
它在 python 2.x 中运行良好,但是当我在 python 3 中尝试时,出现此错误:
ModuleNotFoundError: No module named 'cPickle'
我在 Whosebug 中由其他 post 解决了它,并将我的代码更改为:
import _pickle as cPickle
x = cPickle.load(open('s07.dat', 'rb'))
我得到这个错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x9a in position 8: ordinal not in range(128)
我尝试通过更改编码来解决它:
import _pickle as cPickle
x = cPickle.load(open('s07.dat', 'rb',encoding='iso-8859-1'))
或
import _pickle as cPickle
x = cPickle.load(open('s07.dat', 'rb',encoding='utf-8'))
但我仍然收到此错误:
ValueError: binary mode doesn't take an encoding argument
我的 *.dat 文件包含两个数组,我希望导入它们! 我该如何克服这些问题?
首先,如果您尝试在 python3 中使用 pickle
,只需执行 import pickle
(它在可用时使用已编译的 cPickle)或 from six.moves import cPickle
如果您需要与 python2.
其次,您需要的编码选项是发送到 pickle.load
而不是 open
的编码选项。尝试:
x = cPickle.load(open('s07.dat', 'rb'), encoding='utf-8')
我的问题已通过使用@Macattack 的回答解决,如下所示:
import pickle
x = pickle.load(open('s07.dat', 'rb'), encoding='iso-8859-1')