Luigi commited on
Commit
81633d5
·
1 Parent(s): 72c7bbc

Fix Unicode encoding in export headers for Chinese filenames

Browse files

- Properly encode filenames with Chinese characters using RFC 6266
- Use filename*=UTF-8'' encoding in Content-Disposition headers
- Prevent latin-1 encoding errors when exporting files with Unicode titles

Files changed (1) hide show
  1. src/server/routers/api.py +10 -2
src/server/routers/api.py CHANGED
@@ -96,18 +96,26 @@ def fetch_youtube_audio(payload: dict):
96
  @router.post("/export/transcript")
97
  def export_transcript(payload: TranscriptExportRequest):
98
  content, filename, mime_type = export_service.generate_transcript_export(payload)
 
 
 
 
99
  return StreamingResponse(
100
  iter([content.encode("utf-8")]),
101
  media_type=mime_type,
102
- headers={"Content-Disposition": f"attachment; filename={filename}"},
103
  )
104
 
105
 
106
  @router.post("/export/summary")
107
  def export_summary(payload: SummaryExportRequest):
108
  content, filename, mime_type = export_service.generate_summary_export(payload)
 
 
 
 
109
  return StreamingResponse(
110
  iter([content.encode("utf-8")]),
111
  media_type=mime_type,
112
- headers={"Content-Disposition": f"attachment; filename={filename}"},
113
  )
 
96
  @router.post("/export/transcript")
97
  def export_transcript(payload: TranscriptExportRequest):
98
  content, filename, mime_type = export_service.generate_transcript_export(payload)
99
+ # Properly encode filename for Content-Disposition header (RFC 6266)
100
+ import urllib.parse
101
+ encoded_filename = urllib.parse.quote(filename)
102
+ content_disposition = f"attachment; filename*=UTF-8''{encoded_filename}"
103
  return StreamingResponse(
104
  iter([content.encode("utf-8")]),
105
  media_type=mime_type,
106
+ headers={"Content-Disposition": content_disposition},
107
  )
108
 
109
 
110
  @router.post("/export/summary")
111
  def export_summary(payload: SummaryExportRequest):
112
  content, filename, mime_type = export_service.generate_summary_export(payload)
113
+ # Properly encode filename for Content-Disposition header (RFC 6266)
114
+ import urllib.parse
115
+ encoded_filename = urllib.parse.quote(filename)
116
+ content_disposition = f"attachment; filename*=UTF-8''{encoded_filename}"
117
  return StreamingResponse(
118
  iter([content.encode("utf-8")]),
119
  media_type=mime_type,
120
+ headers={"Content-Disposition": content_disposition},
121
  )