0
0

Django import-export 文字コード charsetを変更する方法

Last updated at Posted at 2023-09-18

Django用のパッケージimport-exportは便利なものである。
xlsxやcsvのフォーマットで入出力が簡単にできる。

ただしDBにUTF-8に対応していない文字列、例えばゼロ幅スペース(\u200b)などが紛れ込んでしまった場合は
ServerError500('cp932' codec can't encode character)が発生してしまう。

Varidationを強化して対象文字列をはじく方法もあるが、今回はimport-exportを直接を修正して対応できるようにする。

環境

 Server側:AWS + ubuntu + NGINX + gunicorn + Django
 アクセス側:Windows PC

手順

まずはimport-exportが保存されているsite-packagesの場所を確認する。
わからない場合はこちらの記事の対処方法2を参考に。

次にExportできるようにする。
\site-packages\import_export\admin.py

# from_encoding = "utf-8"
from_encoding = "utf_8_sig"
# response = HttpResponse(export_data, content_type=content_type)
response = HttpResponse(export_data, content_type=content_type, charset='utf_8_sig')

最後にImportできるようにする。
\site-packages\import_export\tmp_storages.py

# return open(self.get_full_path(), mode)
return open(self.get_full_path(), mode, charset='utf_8_sig')

以上です。

補足

次のように記載するサイトもありましたが意図する処理がされなかったため記事にしました。

class UserAdmin(ExportMixin, admin.ModelAdmin):
...
    base_formats.CSV.CONTENT_TYPE = 'text/csv; charset=CP932'
...

ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0