fix: encode non-ASCII filename in Content-Disposition header

Use RFC 5987 filename*=UTF-8'' percent-encoding to support Chinese and
other Unicode characters in DOCX download filenames.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
liuyuanchuang
2026-03-13 17:41:18 +08:00
parent aee1a1bf3b
commit 39e72a5743

View File

@@ -1,5 +1,7 @@
"""Format conversion endpoints."""
from urllib.parse import quote
from fastapi import APIRouter, Depends, HTTPException
from fastapi.responses import Response
@@ -34,10 +36,11 @@ async def convert_markdown_to_docx(
request.filename,
len(docx_bytes),
)
encoded_name = quote(f"{request.filename}.docx")
return Response(
content=docx_bytes,
media_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
headers={"Content-Disposition": f'attachment; filename="{request.filename}.docx"'},
headers={"Content-Disposition": f"attachment; filename*=UTF-8''{encoded_name}"},
)
except Exception as e:
logger.exception("DOCX conversion failed, filename=%s: %s", request.filename, e)