log

日々の記録と、書くことを楽しむためのブログです

【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

としました。
すると、つつがなくダンプが実行されました。
やったね。

まとめ