You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3中如何恢复邮件对象中的变音符号及特殊字符?

解决Gmail邮件读取中的变音符号编码问题

你遇到的f=C3=BCr这种格式是Quoted-Printable编码——这是邮件系统里用来兼容非ASCII字符的常见编码方式,把特殊字符转换成ASCII范围内的字符组合,方便传输。好在Python的email模块已经帮我们准备好了解码工具,不用自己手动拆解这些编码串。

给你两种可行的解决方案:

方案1:直接用get_payload的解码参数

这是最推荐的方式,get_payload()方法支持decode=True参数,它会自动读取邮件部分的Content-Transfer-Encoding头,自动处理Quoted-Printable或者Base64编码:

import email
# ... 你的其他代码
s = self.message.get_payload()
# 加上decode=True获取解码后的字节串,再转成Unicode字符串
message = s[0].get_payload(decode=True).decode('utf-8')

这里最后用.decode('utf-8')是因为decode=True返回的是字节对象,Python3需要把它转换成str类型才能正常显示。

方案2:手动用quopri模块解码

如果因为某些原因你需要手动处理编码(比如邮件头信息不规范),可以直接用Python标准库的quopri模块来解码Quoted-Printable格式:

import quopri
# ... 你的其他代码
s = self.message.get_payload()
encoded_str = s[0].get_payload()
# 先解码成字节,再转成字符串
decoded_bytes = quopri.decodestring(encoded_str)
message = decoded_bytes.decode('utf-8')

进阶优化:适配不同字符集

有些邮件可能用的不是UTF-8编码,你可以先读取邮件部分的Content-Type头里的字符集,再针对性解码,避免乱码:

s = self.message.get_payload()
part = s[0]
# 获取字符集,默认用utf-8兜底
charset = part.get_content_charset() or 'utf-8'
message = part.get_payload(decode=True).decode(charset)

这样处理后,你就能看到正常的"Weiterer Tests für Email-Empfang"了。

内容的提问来源于stack exchange,提问作者Kev1n91

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:24:34