Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
7
Help us understand the problem. What are the problem?