gpt4 book ai didi

python - 解析传入 Google App Engine 的邮件中的 unicode 附件名称

转载 作者:行者123 更新时间:2023-12-01 06:15:01 25 4
gpt4 key购买 nike

我有一个应用程序引擎应用程序,可以接收带有附件的传入邮件。我检查附件文件名以确保扩展名正确。如果文件名中包含元音变音或重音字符,则编码会使我的方法无法读取文件名,因此我不知道如何检查文件类型。

例如,如果我发送名为 ZumBrückenwirtÜberGrünwaldZurück(2).gpx 的文件

然后打印出附件名称,如下所示:

 attachments = [message.attachments]        
attachmenttype = attachments[0][0][-4:].lower()
logging.error("attachment name %s, %s" % (attachments[0][0], attachmenttype))

我得到:

附件名称 =?ISO-8859-1?B?WnVtQnL8Y2tlbndpcnTcYmVyR3L8bndhbGRadXL8Y2soMikuZ3B4?=, b4?=

最佳答案

这是一个 RFC2047 编码字。您可以使用 email 包对其进行部分解码,尽管之后仍需要将其拼接在一起:

import email.header
def parseHeader(h):
return ''.join(s.decode(c or 'us-ascii') for s, c in email.header.decode_header(h))

>>> parseHeader('=?ISO-8859-1?B?WnVtQnL8Y2tlbndpcnTcYmVyR3L8bndhbGRadXL8Y2soMikuZ3B4?=')
u'ZumBr\xfcckenwirt\xdcberGr\xfcnwaldZur\xfcck(2).gpx'

但是,在 Content-Dispositionfilename="..." 参数中使用编码字完全不正确> 在附件中。 RFC2047 明确规定编码字不能出现在引用的参数中。非 ASCII 参数值应该使用 RFC2231 的规则进行传输,这看起来完全不同(而且非常复杂)。

因此,根据邮件标准,您应该将此文件名视为字面意思“=?ISO-8859-1?B?WnVtQnL8Y2tlbndpc ...”。我相信是 MS Exchange 产生了这些废话。尝试将这种处理保持在最低限度(例如,仅在字符串包含在 =?...?= 中时进行解码,这对于文件名来说是不太可能的。

关于python - 解析传入 Google App Engine 的邮件中的 unicode 附件名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3721528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com