【问题标题】:python email encoding and decoding problemspython邮件编码和解码问题
【发布时间】:2014-07-16 06:28:26
【问题描述】:

基本上我想从收件箱中读取所有新电子邮件并将它们放入数据库中。我使用python的原因是因为它有imaplib,但我对此一无所知。

目前,我有这样的事情:

def primitive_get_text_blocks(email_message_instance):
    maintype = email_message_instance.get_content_maintype()
    if maintype == 'multipart':
        return_parts = ""
        for part in email_message_instance.get_payload():
            if part.get_content_maintype() == 'text':
                return_parts+= " "+ part.get_payload()
        return return_parts
    elif maintype == 'text':
        return email_message_instance.get_payload()
    return ""

fromField=con.escape(email_message["From"])
contentField=con.escape(primitive_get_text_blocks(email_message))

原始get_text_blocks 是从某处复制粘贴的。 结果是我得到这样的数据库条目:

<META http-equiv=3D"Content-Type" content=3D"text/html; charset=3DUTF-8">

据我了解,这与在utf-7 中编码有关。所以我改为get_payload(decode=True),但这给了我字节数组。如果我附加另一个 decode('utf-8'),它有时会崩溃并出现类似

的错误

'codec error can't decode to ...'.

我不知道编码是如何工作的,我只想要一个带有我的电子邮件正文的 unicode 字符串。

为什么没有简单的convert(charset from, charset to)?如何获得可读的电子邮件正文(和地址?)。我发现了IMAP Fetch Encoding 并使用decode_header 我没有进一步了解。

--

我假设编码是字节表示字符的方式,所以考虑到这一点,解码不应该采用字节数组并吐出字符串吗?在堆栈溢出时,我遇到有人声称这与使用utf-8utf-7 编码的蜜蜂有关。这到底是什么意思?

我用谷歌搜索过,似乎有很多重复,但他们得到的答案并没有真正帮助我(我已经尝试了大部分)

【问题讨论】:

  • 那不是 UTF-7,那是可引用打印的。通常,您应该期望大多数单部分的身体部位是 QP 或 base64 编码的。 Content-Transfer-Encoding 标头告诉您哪个(或没有编码,是7bit8bitbinary 之一)。
  • 对于文本部分,你不应该假设 UTF-8 或试图猜测;您应该检查 Content-Type 标头的 charset 属性。

标签: python email encoding utf-8 character-encoding


【解决方案1】:

事实证明这很容易。尽管所有文档都指向 unicode 函数仍然是真实存在的辉煌过去,但 'str' 也是如此。

所以回顾一下,您必须通过 'getPayload' 传递 'decode=True' 并将其包裹在 str(...,'utf-8') 周围。

【讨论】:

    猜你喜欢
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 2020-07-23
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多