Flaskでダウンロード時の日本語ファイル名の文字化けを回避する方法

記事内に広告が含まれています。

PythonのFlaskでデータベースのデータをCSV形式で保存して、そのファイル名に日本語を混ぜると何故か上手くダウンロードできませんでした。

ファイル名に日本語が含まれない場合はうまく動作します。

PythonのFlaskでダウンロードファイル名に日本語が混ざっても文字化けをしない方法です。

Flaskでダウンロードファイル名に日本語があっても文字化けを回避する

Flaskでサーバーからのダウンロードファイル名に日本語を混在しているとダウンロードできません。
ファイルをサーバ上に作るところまでは動作しますが、最後のクライアントへのResponseが失敗するようです。

そこでそれを回避する方法を調べた結果見つけました。

import urllib.parse

downloadFileName=”これは日本語ファイル名.csv"
response = make_response()
wb = open( downloadFileName, "r" )
response.data = wb.read()
wb.close()
response.headers['Content-Disposition'] = "attachment; filename={}".format( urllib.parse.quote( downloadFileName ))
response.mimetype = 'text/csv'
os.remove(downloadFileName)
return response

ファイル名を「urllib.parse.quote()」で変換してからResponseにセットします。

まとめ

Flaskでサーバらのダウンロードファイル名に日本語を混在したファイル名でダウンロードさせるにはファイル名を「urllib.parse.quote()」で変換してからResponseにセットします。

そうすることで正しくクライアントでファイル名が認識でき、ファイルをダウンロードすることができるようになります。

以上、Flaskでダウンロード時の日本語ファイル名の文字化けを回避する方法でした。

タイトルとURLをコピーしました