Кодировка данных в веб-приложении
Создаю api на Python с FastAPI, использую SQLAlchemy и база данных sqlite. При выборке и отдаче данных на роут - данные на русском языке отображаются с неверной кодировкой. при этом в выводе в консоль самих переменных (clubs_by_city), которые содержат данные - все выводится в нормальной кодировке.
@router.get("/city/{city_id}", response_model=typing.List[shemas.ClubsByCity])
def get_clubs_by_cities(city_id: int):
"""Получить все кружки, которые существуют в определенном городе"""
with session.Session() as my_session:
is_city = my_session.query(session.Cities).filter_by(id=city_id).first()
if not is_city:
raise fastapi.HTTPException(
status_code=fastapi.status.HTTP_404_NOT_FOUND,
detail=f"city with id: {city_id} was not found",
)
clubs_by_city = (
my_session.query(session.Clubs)
.filter_by(city_id=city_id).all()
)
if not clubs_by_city:
raise fastapi.HTTPException(
status_code=fastapi.status.HTTP_404_NOT_FOUND,
detail=f"no clubs in city with id: {city_id}",
)
return clubs_by_city
Предполагаю, что это связано именно с FastAPI, а не с базой данных Вот так выглядят данные на роуте: [{"id":1,"name":"ООО «Федотова-ÐниÑимов»"}]
Ответы (1 шт):
Автор решения: pumpkinlol
→ Ссылка
Добавила middleware, который добавляет заголовок в хедер с нужной кодировкой, все начало отображаться верно. выглядит примерно так, если вдруг кому-то понадобится:
@app.middleware("http")
async def add_encoding_header(request: fastapi.Request, call_next):
response = await call_next(request)
response.headers["Content-Type"] = "text/html; charset=utf-8"
return response