【发布时间】:2017-05-06 15:06:31
【问题描述】:
我正在尝试将一组 Tweet 对象保存在文件中。 Tweet 类实例包含 utf8 编码字符。你可以看到下面的代码:
class Tweet:
author='';
text='';
time='';
date='';
timestamp='';
with open('tweets.dat','wb') as f:
pickle.dump(all_tweets,f)
with open('tweets.dat') as f:
all_tweets = pickle.load(f)
当我运行代码时,它会在 pickle.load(f) 行返回一个异常,说明:
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 25: character maps to <undefined>
我的机器规格:
Python 3.5.2 |Anaconda 4.2.0(64 位)| (默认,2016 年 7 月 5 日, 11:41:13) [MSC v.1900 64 位 (AMD64)] 在 win32 上
【问题讨论】:
-
为什么要以二进制方式写入文件并以文本方式读取?
-
我想检索我的对象然后使用它们。虽然我在这里提到了简单的情况,但 Tweet 类也可能包含非文本属性。
-
您在写入时替换了整个
DAT文件,但您希望将其与外部编码/解码系统一起使用。您还记得“创建此文件时使用了哪种解码方式吗?” .大多数人回答“不知道!” ,因为os_encoding、python encode、python decode模式在哪里?
标签: python encoding utf-8 pickle