LA_*_*LA_ 5 python email google-app-engine email-attachments python-2.7
我使用以下代码来提取附件的文件名:
import email.utils
msg = email.message_from_string(self.request.body) # http://docs.python.org/2/library/email.parser.html
for part in msg.walk():
ctype = part.get_content_type()
if ctype in ['image/jpeg', 'image/png']:
image_file = part.get_payload(decode=True)
image_file_name = part.get_filename()
Run Code Online (Sandbox Code Playgroud)
它在许多情况下运行良好,但有时image_file_name我得到像=?KOI8-R?B?xsHTLTk2Mi5qcGc=?=或的值=?UTF-8?B?REkyeTFXMFNMNzAuanBn?=.
我该如何处理这类案件?
小智 12
您可以像这样使用decode_header函数:
from email.header import decode_header
filename = part.get_filename()
if decode_header(filename)[0][1] is not None:
filename = str(decode_header(filename)[0][0]).decode(decode_header(filename)[0][1])
Run Code Online (Sandbox Code Playgroud)
使用Python 3:
from email.message import EmailMessage
from email.header import decode_header
def get_part_filename(msg: EmailMessage):
filename = msg.get_filename()
if decode_header(filename)[0][1] is not None:
filename = decode_header(filename)[0][0].decode(decode_header(filename)[0][1])
return filename
Run Code Online (Sandbox Code Playgroud)
您应该查看以“?”分隔的三个部分,并使用前两个部分作为如何处理第三部分的说明:
第一位是字符编码(示例中为 KO18-R 和 UTF-8),第二位是“B”,表示 Base64 编码 - Q 在它的位置将表示可引用打印,因此您应该准备您的也有这样的代码。
| 归档时间: |
|
| 查看次数: |
4149 次 |
| 最近记录: |