Luc*_* N. 9 unicode werkzeug http-headers flask
所以我试图让浏览器下载一个具有特定名称的文件,该文件存储在数据库中.为防止文件名冲突,文件将使用GUID保存在磁盘上,当需要实际下载时,将为浏览器提供数据库中的文件名.这个名字是用日语写的,当我在页面上显示它时它很好,所以它在数据库中存储好.当我尝试让浏览器以该名称下载时:
return send_from_directory(app.config['FILE_FOLDER'], name_on_disk,
as_attachment=True, attachment_filename = filename)
Run Code Online (Sandbox Code Playgroud)
Flask抛出一个错误:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-20:
ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
错误似乎不是来自我的代码,而是来自Werkzeug的一部分:
/werkzeug/http.py", line 150, in quote_header_value
value = str(value)
Run Code Online (Sandbox Code Playgroud)
为什么会这样?根据他们的文档,Flask是"100%Unicode"
在重写我的代码之前,我确实遇到了这个问题,并且通过在Werkzeug中修改了很多东西来修复它,但我真的不想为部署的应用程序执行此操作,因为这是一个痛苦和不好的做法.
Python 2.7.6 (default, Nov 26 2013, 12:52:49)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Run Code Online (Sandbox Code Playgroud)
filename ="[얼티메이트] [131225] TVアニメ「キルラキル」オリジナルサウンドトラック(FLAC).zip"
print repr(文件名)
'[\xec\x96\xbc\xed\x8b\xb0\xeb\xa9\x94\xec\x9d\xb4\xed\x8a\xb8] [131225] TV\xe3\x82\xa2\xe3\x83\x8b\xe3\x83\xa1\xe3\x80\x8c\xe3\x82\xad\xe3\x83\xab\xe3\x83\xa9\xe3\x82\xad\xe3\x83\xab\xe3\x80\x8d\xe3\x82\xaa\xe3\x83\xaa\xe3\x82\xb8\xe3\x83\x8a\xe3\x83\xab\xe3\x82\xb5\xe3\x82\xa6\xe3\x83\xb3\xe3\x83\x89\xe3\x83\x88\xe3\x83\xa9\xe3\x83\x83\xe3\x82\xaf (FLAC).zip'
>>>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1039 次 |
| 最近记录: |