![Ubuntu 语言环境对 Python 应用程序来说不正确](https://linux22.com/image/622303/Ubuntu%20%E8%AF%AD%E8%A8%80%E7%8E%AF%E5%A2%83%E5%AF%B9%20Python%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%9D%A5%E8%AF%B4%E4%B8%8D%E6%AD%A3%E7%A1%AE.png)
我在 Amazon EC2 上的 Ubuntu AMI 上安装了 NGINX -> UWSGI -> Django(python) 堆栈。我在访问名称中含有 unicode 字符的文件时遇到了问题。Django App (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 shell 中运行相同的代码时,一切看起来都好多了。
locale.getdefaultlocale() = ('en_US', 'UTF-8')
locale.getpreferredencoding() = 'UTF-8'
sys.getdefaultencoding() = 'ascii'
sys.getfilesystemencoding() = 'UTF-8'
所以我唯一的想法是,在 nginx 和 uwsgi 部分的某个地方,语言环境设置不正确。有没有办法强制其中一个使用特定的语言环境?或者可能是用户的问题?运行 nginx 和 uwsgi 的用户与我在 shell 中运行这些命令时使用的用户不同。