問題
主題の通り、pythonで作成した日本語を含むcsv(utf-8)で読み込ませると以下のようなエラーが起こる場合がある
Imported file has a wrong encoding: 'cp932' codec can't decode byte 0xef in position 0: illegal multibyte sequence
いろいろ文字コードを変えてみたが同様のエラーが発生
対策
もっと良い方法があるとは思いますが、以下に自分が実践した応急的な対策を紹介します
csv書き込みの際はutf-8(BOM付き)
pythonにてcsvを作成する際
with open(csv_path, 'w', encoding="utf_8_sig") as f:
writer = csv.writer(f)
writer.writerows(records)
と、このようにencodingをutf-8(BOM付きのほうが良い)に指定
Windowsにてエクセルで読み込む際BOM付きでしか正常に読み込まれない
utf-8の場合、BOM付きは'_sig'をつけるようです
BOMに関してはこちらを参照してください
.xlsxで保存
作成したcsvをエクセルで起動し .xlsxファイルで保存します
インポート
django-import-exportで xlsx をインポート
環境
Python 3.9.7
Django 3.1.2
django-import-export 2.7.1