来自如何在 HTTP 中对 Content-Disposition 标头的文件名参数进行编码?我了解到 RFC 5987 中定义的编码用于对Content-disposition标头中的文件名进行编码。从/sf/answers/95315251/我了解到,至少自 2012 年 11 月以来,主要浏览器的支持都很好。这两个问题都相当老了,但我找不到根据python/tornado 中的这种编码。我有一个
self.set_header('Content-Disposition', 'attachment;filename="{}.{}"'.format(basename, format))
Run Code Online (Sandbox Code Playgroud)
在我的代码中,当basename包含 latin1 之外的字符时会失败,我正在寻找一种标准方法对其进行编码。
您可以使用urllib.parse.quote它来编码。只需添加 的样板即可filename*=UTF-8\'\'。例如,这个简单的服务器提供一个具有 UTF-8 文件名的文件:
import tornado.httpserver\nimport tornado.ioloop\nimport tornado.web\n\nimport urllib.parse\n\nclass MainHandler(tornado.web.RequestHandler):\n def get(self):\n filename = \'file "\\\'\xc3\xa4\xe2\x86\xad.txt\'\n encoded_filename = urllib.parse.quote(filename, encoding=\'utf-8\')\n self.set_header(\n \'Content-Disposition\',\n \'attachment;filename*=UTF-8\\\'\\\'{}\'.format(encoded_filename))\n self.write(\'text file with file name file "\\\'\xc3\xa4\xe2\x86\xad.txt.\\n\')\n self.write(\'Most browsers will encode the " as _ or so.\')\n\n\napplication = tornado.web.Application([\n (r"/", MainHandler),\n])\nhttp_server = tornado.httpserver.HTTPServer(application)\nhttp_server.listen(8888)\ntornado.ioloop.IOLoop.current().start()\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1781 次 |
| 最近记录: |