[python UnicodeDecodeError pickle open] Python 2.x -> 3.x str avant u

raison

UnicodeDecodeErrorPython a souvent ce problème entre les versions 2.x et 3.x à cause de l'incongruité de l'encodage des caractères .

tu avant str

Utilisez str.encode pour résoudre

string = u'anomaly'
print(string.encode('utf-8')) 
# 'anomaly'

Référence de contenu plus spécifique : https://blog.csdn.net/qq_21153619/article/details/84841184

Scénario 1 Scénario sans cornichon

Dans les scénarios de décodage sans pickle, la fonction open n'utilise généralement pas bianry pour décoder les fichiers.Pour le moment, vous pouvez utiliser python 2.x pour changer l'encodage en utf-8 ou ISO-8859-1 lors de l'écriture de ce fichier.Il est recommandé que lors de l'écriture dans le fichier, veillez à encoder la chaîne avant de la sortir.

data # some data of str 
f = open(file_path, 'w', encoding='utf-8')
for item in data:
	f.write(item.encode('utf-8'))
f.close()

Utilisez ensuite python 3.x pour spécifier l'encodage à lire.

Scénario 2 scénario cornichon

Lorsque nous stockons des fichiers pickle, nous utilisons généralement le binaire pour le vidage, tout comme

data # some data of some kinds
pickle.dump(data, open(data_path, 'wb'))

À ce stade, si nous lisons selon la méthode de l'étape précédente, une erreur sera signalée, indiquant que lors de la lecture sous le principe du binaire, l'encodage ne peut pas être spécifié dans la fonction open.
Mauvaise façon:

pickle.load(data, open(date_path, 'rb', encoding='utf-8'))  # 报错

La bonne manière:
spécifiez l'encodage à l'intérieur de la fonction pickle, pas à l'intérieur de la fonction open

pickle.load(data, open(data_path, 'rb'), encoding='latin1')

Référence : https://blog.csdn.net/wangleiwavesharp/article/details/106402165

おすすめ

転載: blog.csdn.net/Petersburg/article/details/124183208