'ascii' codec can't encode character
Djangoで日本語のファイルをアップロードしたらPythonでよく見る文字コードエラーが返ってきた。
'ascii' codec can't encode character in position :ordinal not in range()
アップロードするファイル名を英数字にするとエラーが起きなかった。
そこでファイル名を処理する箇所でencord
やらdecode
をしたけれどうまくいかなかった。
(今思えばとても無駄なことをしていた)
テスト環境の
python manage.py runserver
では問題なく動作していたのでもしかしたら本番環境のapacheが原因なのかもしれないと思って調べたら、apacheはデフォルトだとCロケールで起動するので変更しなければならないらしい。
解決方法
自分の環境はCentOS7だったので/etc/sysconfig/httpd
に環境変数を設定した。
/etc/sysconfig/httpd
export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'
とりあえずこれで解決した。
後々、公式のドキュメントに書いてあるのを見つけて泣いた…
https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/modwsgi/