DjangoでダウンロードするCSVの文字コードを設定


press
DjangoでダウンロードするCSVの文字コードを設定

以下のような、attachmentをつけて即ダウンロードが始まるシステムで、文字コードをShift-JISにする為にto_csv()の引数にencodingをShift-JISに設定しても、ダウンロードするとUTF-8でダウンロードされてしまいました。
他にもencodingをcp923に設定してダウンロードしてみましたが、同じくUTF-8でダウンロードされてしまいました。

    file_name = 'filename.csv'

    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=",", encoding='shift_jis')

    return response

調べていて分かったことは、to_csv()のencodingをShift-JISに設定するのではなく、HttpResponse自体のcharsetをShift-JISに設定してあげると無事にダウンロードできるということ。

    file_name = 'filename.csv'

    response = HttpResponse(content_type='text/csv; charset=Shift-JIS')
    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=",", encoding='shift_jis')

    return response

response = HttpResponse(content_type='text/csv; charset=Shift-JIS')
charsetをShift-JISに設定


株式会社ファントムへのお問い合わせ

当ブログは群馬県でPythonを使ったAIやシステムを開発している株式会社ファントムが運営しています。




    Show Comments (0)

    Comments

    Related Articles

    Python

    Pythonで文字列をリスト化して一文字づつ処理

    Pythonで文字列をリスト化して一文字づつ処理 Pythonで文字列をリスト化して一文字づつ処理する方法です。サンプルでは一文字づつ文字をshift-jisに変換して、変換できない文字を表示します。 開発環境 ソースコ […]

    Posted on by press
    Python

    OpenCVで複数の動画を連結する

    OpenCVで複数の動画を連結する 複数の動画素材を結合したり、GoProで長時間撮影した時に約4GB毎に分割される動画ファイルを結合して一つの動画を書き出す方法です。 コードはGitHubリポジトリにあげています。 開 […]

    Posted on by press