Ubuntu 語言環境對於 Python 應用程式不正確

Ubuntu 語言環境對於 Python 應用程式不正確

我在 Amazon EC2 上的 Ubuntu AMI 上安裝了 NGINX -> UWSGI -> Django(python) 堆疊。我在存取名稱中包含 unicode 字元的檔案時遇到了問題。 Django 應用程式(夾層)的確切輸出是

嘗試存取路徑中包含 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 shell 中運行相同的程式碼時,一切看起來都好多了。

locale.getdefaultlocale() = ('en_US', 'UTF-8')
locale.getpreferredencoding() = 'UTF-8'
sys.getdefaultencoding() = 'ascii'
sys.getfilesystemencoding() = 'UTF-8'

所以我唯一的想法是,在 nginx 和 uwsgi 部分的某個地方,區域設定沒有正確設定。是否有強制其中任何一個使用特定區域設定的方法?或者可能是使用者的問題?執行 nginx 和 uwsgi 的使用者與我在 shell 中執行這些命令的使用者不同。

相關內容