LoginSignup
9
6

More than 5 years have passed since last update.

Django 日本語名のファイルアップロード

Posted at

'ascii' codec can't encode character

Djangoで日本語のファイルをアップロードしたらPythonでよく見る文字コードエラーが返ってきた。
SnapCrab_NoName_2018-10-18_17-13-0_No-00.png

'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/

9
6
1

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
9
6