【Django】文字コードエラーでdumpdataに失敗してしまったとき
発生した問題
DjangoでDBのデータをバックアップするために、dumpdataコマンドを利用しました。
> python manage.py dumpdata アプリ名 > ファイル名.json
すると……。
CommandError:Unable to serialize database: 'cp932' codec can't encode character '\u212a' in position 5: iligal multibyte sequence
というエラーメッセージが出てしまいます。
ざっくり言うと「cp932コーデックで\u212aという文字を扱えないからダンプできないよー」と言ってるみたいです。
ちなみに\u212aというのはケルビンみたいです。
文字コードを調べる
とにかく悪さをしているのは文字コードか、と思いました。
実行した環境のサーバはwindows Serverなので、デフォルトでcp932でプログラムを実行している可能性があるな、と踏みます。
なので、サーバの文字コードを調べます。
コマンドプロンプトで以下のコマンドを実行します。
> chcp
すると、「932」と出てきます。思った通り、cp932のようです。
UTF8モードで実行する
コマンドを実行するときの文字コードをUTF8にできれば何とかなりそうだなと思い当たります。
調べてみると、pythonをUTF8モードで実行できるオプションがあることを知りました。
PEP 540 – Add a new UTF-8 Mode
これを踏まえ、コマンドを修正して
> python -X utf8 manage.py dumpdata アプリ名 > ファイル名.json
としました。
すると、つつがなくダンプが実行されました。
やったね。