
Amazon EC2 の Ubuntu AMI に NGINX -> UWSGI -> Django(python) スタックをインストールしています。名前に Unicode 文字が含まれるファイルにアクセスするときに問題が発生しました。Django アプリ (Mezzanine) からの正確な出力は次のとおりです。
パスに Unicode 文字を含むファイルにアクセスしようとしましたが、現在のロケールは utf-8 をサポートしていません。'LC_ALL' を正しい値 (例: 'en_US.UTF-8') に設定する必要がある可能性があります。
コマンドを実行すると、locale
出力は次のようになります。
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
私にはすべてがうまくいっているように見えるので、次に、エラーを生成するコードのセクションにロケール設定を出力するコードを追加しました。
その結果は次のようになります。
locale.getdefaultlocale() = (None, None)
locale.getpreferredencoding() = 'ANSI_X3.4-1968'
sys.getdefaultencoding() = 'ascii'
sys.getfilesystemencoding() = 'ANSI_X3.4-1968'
間違っているように見えますが、修正方法がわかりません。同じコードを Python シェルで実行すると、すべてがはるかに良くなります。
locale.getdefaultlocale() = ('en_US', 'UTF-8')
locale.getpreferredencoding() = 'UTF-8'
sys.getdefaultencoding() = 'ascii'
sys.getfilesystemencoding() = 'UTF-8'
したがって、私が唯一考えられるのは、nginx と uwsgi の部分のどこかでロケールが適切に設定されていないということです。どちらかに特定のロケールを使用するように強制する方法はありますか? それとも、ユーザーに問題があるのでしょうか? シェルでこれらのコマンドを実行するために使用していたユーザーとは別のユーザーが nginx と uwsgi を実行しています。