UnicodeDecodeError:'gbk' codec ne peut pas décoder les octets 0x80 en position 0 illégal de la séquence multi-octets
J'utilise python 3.4 avec win 7 64 bits. J'ai couru le code suivant:
6 """ load single batch of cifar """
7 with open(filename, 'r') as f:
----> 8 datadict = pickle.load(f)
9 X = datadict['data']
Le mauvais message est UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 0: illegal multibyte sequence
J'ai changé la ligne 7:
6 """ load single batch of cifar """
7 with open(filename, 'r',encoding='utf-8') as f:
----> 8 datadict = pickle.load(f)
9 X = datadict['data']
Le mauvais message est devenu UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte
.
Le message enfin des points pour le Python34\lib\codecs.py dans décoder(auto, entrée, finale).
311 # decode input (taking the buffer into account)
312 data = self.buffer + input
--> 313 (result, consumed) = self._buffer_decode(data, self.errors, final)
314 # keep undecoded input until the next call
315 self.buffer = data[consumed:]
J'ai modifié le code comme:
6 """ load single batch of cifar """
7 with open(filename, 'rb') as f:
----> 8 datadict = pickle.load(f)
9 X = datadict['data'] 10 Y = datadict['labels']
Bien, ce temps est UnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in position 6: ordinal not in range(128)
.
Quel est le problème et comment le résoudre?
Qu'est-ce que la pleine traçabilité en amont de la dernière version? Le
"importer que pickle pickle import numpy comme np import os def load_CIFAR_batch(nom de fichier): """ charger seul lot de l'icra """ avec open(fichier, 'rb') as f: datadict = pickle.charge(f) " C'est comment le cornichon est créé.
Vous pouvez modifier votre post pour ajouter plus d'informations.
Vous me dites comment le cornichon est chargement, pas comment il a été écrit.
le décapant est le standard de python module. Je n'ai pas la toucher.
pickle
la documentation indique que le fichier objet doit retourner octets, de sorte que vous pour ouvrir le fichier d'objet en mode binaire avec 'rb'
, mais vous avez maintenant un nouveau message d'erreur. Comment était le cornichon fichier créé en premier lieu?"importer que pickle pickle import numpy comme np import os def load_CIFAR_batch(nom de fichier): """ charger seul lot de l'icra """ avec open(fichier, 'rb') as f: datadict = pickle.charge(f) " C'est comment le cornichon est créé.
Vous pouvez modifier votre post pour ajouter plus d'informations.
Vous me dites comment le cornichon est chargement, pas comment il a été écrit.
le décapant est le standard de python module. Je n'ai pas la toucher.
OriginalL'auteur Haoyu | 2015-01-27
Vous devez vous connecter pour publier un commentaire.
Pickle fichiers sont des fichiers de données binaires, donc vous devez toujours ouvrir les fichiers avec l'
'rb'
mode lors du chargement. N'essayez pas d'utiliser le mode texte ici.Vous essayez de charger un Python 2 cornichon qui contient des données de chaîne. Vous aurez à dire
pickle.load()
comment convertir les données vers Python 3 cordes, ou de les laisser comme des octets.La valeur par défaut est d'essayer et de décoder les chaînes ASCII, et que le décodage échoue. Voir la
pickle.load()
de la documentation:Réglage de l'encodage à
latin1
vous permet d'importer les données directement:Il parait que c'est la
numpy
données du tableau qui est à l'origine des problèmes ici, comme toutes les chaînes de caractères dans le jeu utiliser les caractères ASCII seulement.L'alternative serait d'utiliser
encoding='bytes'
mais alors tous les noms de fichiers et de haut niveau les clés de dictionnaire sontbytes
objets et vous auriez à décoder ceux de préfixe ou de tous vos clés littéraux avecb
.OriginalL'auteur Martijn Pieters