原因
python在2.x与3.x版本之间常常会因为字符编码的不融洽的问题出现UnicodeDecodeError 这个问题。
str 前有u
利用str.encode进行解决
string = u'anomaly'
print(string.encode('utf-8'))
更具体的内容参考:https://blog.csdn.net/qq_21153619/article/details/84841184
情形一 非pickle场景下
在非pickle解码的场景下,open函数一般不会用bianry的方式去解码文件,这个时候可以在写这个文件的时候,利用python 2.x把encoding改为utf-8或者ISO-8859-1,建议在文件里写的时候,还是注意一下把str给encode一下再输出出去。
data
f = open(file_path, 'w', encoding='utf-8')
for item in data:
f.write(item.encode('utf-8'))
f.close()
然后用python 3.x指定encoding去读。
情形二 pickle场景下
我们在存储pickle文件的时候,通常是用binary的方式去dump的,就像
data
pickle.dump(data, open(data_path, 'wb'))
这个时候如果我们按照上一步的方式这么去读会报错,提示在binary的前提下进行读取的时候,不能在open函数中指定encoding。 错误方式:
pickle.load(data, open(date_path, 'rb', encoding='utf-8'))
正确方式: 在pickle函数的内部,而非open函数的内部指定encoding
pickle.load(data, open(data_path, 'rb'), encoding='latin1')
参考:https://blog.csdn.net/wangleiwavesharp/article/details/106402165
|