带有unicode文件名的附加文件显示为"noname

1 投票
1 回答
578 浏览
提问于 2025-04-17 17:10

我遇到了一个问题,带有unicode字符(主要是æ、ø和å)的附件在邮件中显示为“noname”。这些附件来自FileFields,所以是系统自动附上的。

这是消息功能的一部分:

msg = mail.EmailMessage()
msg.subject = u"%s" % message.subject
msg.from_email = "%s <%s>" % (message.author_name, message.author_email)
msg.content_subtype = "html"
msg.body = render_to_string("core/send_message_all.html", locals())
message_to = re.split(", |,", message.receiver)
if message.file1:
    msg.attach_file(message.file1.file.path)
msg.send(fail_silently=False)

我使用的是Django 1.4.5。有没有人知道我该怎么解决这个问题?我考虑过在上传时对文件名进行处理,但那样的话,我也得处理一下已经存在的文件。

1 个回答

1

我最后用了另一种方法。我用的是attach(),而不是attach_file(),只改变了附件的文件名。

在文档模型中:

def filename(self):
    return unicodedata.normalize('NFKD', os.path.basename(self.file.name)).encode('ascii','ignore')

在views.py文件里:

file_1 = open(message.file1.file.path)
msg.attach(message.file1.filename(), file_1.read(), message.file1.content_type)

提到“message.file1”的原因是因为它是一个外键。

抱歉给你带来不便 :-)

撰写回答