Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

'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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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