ダウンロードするファイルの文字コードを動的に変更
ダウンロードするファイルの文字コードを動的に変更 ウェブアプリケーションの中でCSVやテキストファイルをダウンロードさせた時に文字化けが発生する事があります。使用する文字コードが決まっていれば予め固定してしまう事で文字化 […]
Filter by Category
ダウンロードするファイルの文字コードを動的に変更
ウェブアプリケーションの中でCSVやテキストファイルをダウンロードさせた時に文字化けが発生する事があります。使用する文字コードが決まっていれば予め固定してしまう事で文字化けは防げますが、端末やOSが異なる環境で不特定多数が利用する場合にはクライアントに合わせて動的に文字コードを変更する必要があります。その際にクライアントのUserAgentからOSやブラウザ環境を取得して適切な文字コードでダウンロードさせる方法です。
Djangoでは以下のコードでクライアントのUserAgentが取得できます。
user_agent = request.META['HTTP_USER_AGENT']
取得したクライアントのUserAgentを表示してみると以下の様にクライアントのOSやヴァージョン、ブラウザの種類などが取得できています
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15
def file_charset(request):
user_agent = request.META['HTTP_USER_AGENT']
if 'Windows' in user_agent:
response = HttpResponse(content_type='text/csv; charset=Shift-JIS')
else:
response = HttpResponse(content_type='text/csv;')
response['Content-Disposition'] = 'attachment; filename="{}"'.format(urllib.parse.quote(file_name))
df.to_csv(path_or_buf=response, sep=',', float_format='%.2f', index=True, decimal=",")
return response
user_agent = request.META['HTTP_USER_AGENT']
クライアントのUserAgentを取得します。if 'Windows' in user_agent:
クライアントのUserAgentがWindowsの場合にはcharsetをShift-JISに設定します。(デフォルトはUTF-8)response['Content-Disposition'] = 'attachment; filename="{}"'.format(urllib.parse.quote(file_name))
attachmentをつける事で表示せずにダウンロードが始まります。df.to_csv(path_or_buf=response, sep=',', float_format='%.2f', index=True, decimal=",")
CSVに書き出します。
群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。
メーリングリストに登録するとファントムの最新情報をお届けします
お客様のメールアドレスを共有することはありません
Comments