【发布时间】:2015-06-17 13:23:52
【问题描述】:
某个 Python API 为结束词 Järvenpää 返回 u'J\xe4rvenp\xe4\xe4'。
其中 \xe4 == ä
然后我调用 email.header 将此字段添加到要打印的标题中。
email.header 在尝试解码元音变音时跌倒:
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/email/header.py", line 73, in decode_header
header = str(header)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 1: ordinal not in range(128)
我已经尝试了几件事:
- 添加
# -*- coding: utf-8 -*-到 header.py 的顶部 - 在将芬兰语字符串传递给 email.header 之前调用
unicode() - 在将芬兰语字符串传递给 email.header 之前调用
.encode('utf-8')
没有人能解决问题。我做错了什么?我想一个解决方案不会涉及修改 header.py(一个核心 Python 模块)。
Python 版本:2.7.10
更新:
Header() 没有被直接实例化。相反,我在字符串上调用 decode_header() 函数:
email.Header.decode_header(theString)
现在看来,只是这样扩展:
email.Header.decode_header(theString.encode('utf-8'))
解决问题
【问题讨论】:
-
您是如何使用
email模块添加标题的?请在问题中包含您的代码,最好是MCVE。 -
@LukasGraf 查看我的更新。你会相信这个解决方案是可靠的吗?或者你会建议一些不同的东西吗?
-
等待 - 您是在尝试创建一个标头(发送电子邮件)还是解析一个标头(阅读电子邮件)?
-
decode_header是一个帮助函数,用于通过将RFC 2047 电子邮件标头 解码为(decoded_string, charset)元组列表将其转换为Python 字符串。您能否用一个完整的示例来更新您的问题,以说明您正在尝试做什么(不仅仅是 sn-ps)? -
@LukasGraf 这里有更清晰、更全面的问题描述:stackoverflow.com/questions/30907708/…
标签: python unicode utf-8 utf python-unicode