使用 BOM

问题描述

我有一个字符串,(我认为)里面有 BOM,我想删除所有 BOM,而不会弄乱格式。

例如我的字符串如下所示:

>=20
> =EF=BB=BF
>=20
> -Jeff
>=20
> Begin forwarded message:
>=20

我希望它看起来像:

>
>
>
> -Jeff
>
> Begin forwarded message:
>

我可以留下 > 来表示缩进,我只想删除杂散字符。如果我对消息进行解码,那么我会得到一个比我已有的字符串更难看且难以阅读的字符串。它有一堆来自换行符的 \r\n\r\n ,所以理想情况下,id 喜欢删除提到的内容,不理会格式。

编辑1: 这是我如何达到这一点:

def getEmails():
    LOG.debug("Starting to get emails")
    conn = connectToMailServers()
    conn.select('inBox',readonly=True )
    result,data = conn.search(None,'(UNSEEN)')
    mail_ids = data[0]

    id_list = mail_ids.split()

    for _,i in enumerate(id_list):
        result,data = conn.fetch(str(int(i)),'(RFC822)' )
        for response_part in data:
            if isinstance(response_part,tuple):
                msg = email.message_from_bytes(response_part[1])
                getPlainText(msg)

def getPlainText(msg):
    for part in msg.walk():
        if part.get_content_type() == 'text/plain':
            LOG.debug(part.get_payload())
            return str(part.get_payload())

如果我打开解码 (part.get_payload(decode=True)) 然后我会遇到字符串的问题,现在有一堆 \r\n\r\n 那么我如何在没有解码的情况下执行此操作或如何将其重新格式化为删除换行符的格式化字符串

解决方法

明确告诉 str 转换器使用 UTF-8 有效,

str(getPlainText(msg),"utf-8")

给了我想要的预期结果。