【发布时间】:2023-03-27 23:35:01
【问题描述】:
我正在尝试从以 ISO-8859-1 编码的文件中读取一堆电子邮件,然后将它们(部分)写入使用 UTF-8 编码的 JSON 文件。我目前有一个程序可以读取它们并生成具有str 类型属性的对象,其中包含消息的各个字段。我想将这些 str 字符串(编码位字符串)转换为 unicode 字符串(抽象 Unicode 对象),以便以后在写出文件时可以使用 UTF-8 重新编码它们。所以我使用str的decode方法,像这样:
msg_dict = {u'Id' : message.message_id.decode('iso-8859-1'),
u'Subject' : message.subject.decode('iso-8859-1'),
u'SenderEmail' : message.sender_email.decode('iso-8859-1'),
u'SenderName' : message.sender_name.decode('iso-8859-1'),
u'Date': message.date.isoformat()}
根据我阅读的文档,decode 应该采用str 对象,根据给定的编码解释其字节,并返回代表这些字符的unicode 对象。但是当我运行我的代码时,我得到了这个错误:
File "/home/edward/long/path/omitted/dumpMails.py", line 38, in <module>
u'Subject' : message.subject.decode('iso-8859-1'),
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 1: ordinal not in range(128)
当我调用 decode 时,我怎么会收到 encode 错误?我最好的猜测是 Python 已决定使用默认编码自动将返回的 unicode 转换回 str。但它为什么要这样做呢?将unicodes 放入字典有什么关系吗?
【问题讨论】:
标签: python string python-2.7 unicode