Python-如何使用unicode文件名从文件系统发送文件



所以我使用Flask来提供一些文件。我最近将该项目从Python3降级为Python2.7,这样它就可以使用更多的扩展,并遇到了以前没有的问题。我正在尝试从文件系统中提供一个日语文件名的文件,当我尝试return send_from_directory(new_folder_path, filename, as_attachment=True)时我得到UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-20: ordinal not in range(128)。在quote_header_value = str(value)中(这是一个werkzeug的事情)。我已经设置了模板,只需在HTML中有{{filename}}就可以在页面上显示文件名,而且它显示得很好,所以我假设它是从文件系统中读取名称的?只有当我尝试send_from_directory以便用户可以下载它时,它才会抛出这个错误。我尝试了一堆.encode('utf-8') and.decode('utf-8')的组合,但都不起作用,我对此感到非常沮丧。在Python3中,一切都能无缝工作,因为一切都被视为unicode,而寻找解决这一问题的方法带来了结果,我似乎需要一个compsci学位来解决这个问题。有人能解决这个问题吗?谢谢

好吧,在引擎盖下与它搏斗了一段时间后,我修复了它,但不是以一种非常优雅的方式,我不得不修改一些werkzeug东西的来源。在"http.py"中,我用unicode(value)替换了str(value),并在http.py和datastructures.py中用"utf-8"替换了"latin-1"的每个实例。它解决了这个问题,文件在最新的Firefox和Chrome中都可以很好地下载。正如我之前所说,我宁愿不必修改我正在使用的库的源代码,因为在不同的系统上部署/测试时这是一种痛苦,所以如果有人对此有更好的解决方案,请分享。我看到一些人建议只将文件名作为URL的一部分,但我不能这样做,因为我需要保持URL的简单和干净。

最新更新