我在 FastAPI 上创建了一项服务,该服务通过引用返回文件。
原始看起来像这样:
import os
from fastapi import FastAPI, HTTPException
from starlette.responses import FileResponse
app = FastAPI()
db = DataBase(config=CONFIG.mysql)
@app.get('/v1.0/get_file')
async def get_file(id_file: str):
# ...
file = db.get_file(id_file)
# ...
return FileResponse(file.path, filename=file.file_name)
只要file.file_name不包含俄语字符,文件就成功下载。一旦俄罗斯字母出现在那里,我的代码就会崩溃并出现错误:
...
File
"/home/servicemanager/services/file_service/venv/lib/python3.7/site-packages/starlette/datastructures.py",
line 606, in setdefault
set_value = value.encode("latin-1")
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 22-26: ordinal not in range(256)
我不明白这个错误来自哪里。我拥有 utf-8 编码的所有内容。我建议也许数据库以错误的编码返回给我一些东西,但是即使我明确地写了一个 call FileResponse(file.path, filename='отчет.xlsx'),我的代码仍然返回一个错误。请帮我弄清楚发生了什么。
