web-dev-qa-db-fra.com

UnicodeDecodeError: le codec 'ascii' ne peut pas décoder l'octet 0x8b

J'utilise le code suivant de ici (avec des modifications mineures):

import _pickle as cPickle 

def unpickle(file):
    fo = open(file, 'rb')
    dict = cPickle.load(fo)
    fo.close()
    return dict

unpickle('data_batch_1')

Lorsque j'exécute le code, je reçois le texte suivant, à condition que j'utilise Python 3.5.2:

Traceback (most recent call last):
  File "open_batch.py", line 10, in <module>
    unpickle('data_batch_1')
  File "open_batch.py", line 5, in unpickle
    dict = cPickle.load(fo)
UnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in position 6: ordinal not in range(128)

Comment puis-je résoudre ce problème?

Merci.

6
Simplicity

Puisqu'il échoue sur l'encodage des caractères

Essayez d'utiliser le latin

cPickle.load(file, encoding='latin1')
14
Robert I

remplacer:

dict = cPickle.load(fo)

dans unpickle fonctionne avec:

dict = cPickle.load(fo, encoding='latin1')
1
ChaosPredictor