PythonAnywhere 中的 Flask 找不到带有西班牙语字符的文件名

Flask in PythonAnywhere doesn't find file name with spanish characters

我正在尝试建立一个网站,该网站只有一个页面用于下载一些资源,而我的本地 flask 版本恰好可以完美地找到任何文件名(使用 send_from_directory() 时),但是一旦部署在PythonAnywhere 它不适用于具有西班牙重音字符的文件名,例如 á.

我猜它与 unicode 有关,但我找不到如何修复它(pythonanywhere 的日志似乎没有显示任何内容,因为 flask 只是提供了一个 "Not found" 页面到用户)。

...我真的很想在人们下载的文件的名称中加入这些口音(它们是 anki 牌组,其中一些用于教育目的,提供糟糕的拼写法感觉不对在牌组名称中)。

我的代码如下所示:

@app.route('/anki/d/<file>')
def d_anki(file):
   if file == "verbscat":
       ankideck = "[Rusca] Temps Verbals Catalans.apkg"
   elif file == "irregular":
       ankideck = "[Rusca] Verbs Irregulars Anglès.apkg"
   # ...
   else:
       return f"The file {file} wasn't found."
   return send_from_directory("./static/anki/", ankideck, as_attachment=True, cache_timeout=0)

(然后我 link 到这个 url 在一个按钮中 <a href="/anki/d/irregular" ...>

哦,我刚刚意识到我可以通过在 send_from_directory 中的参数中添加 attachment_filename="Whatever I want to call it" 来为下载的文件选择不同的名称。

所以我想我们可以使用这个解决方法(使用简单的无重音名称的原始文件,然后添加正确的名称)。

if file == "irregular":
    ankideck = "irregular.apkg"
    name = "[Rusca] Verbs Irregulars Anglès.apkg"
# ...
return send_from_directory("./static/anki/", ankideck, as_attachment=True, attachment_filename=name cache_timeout=0)