Django使用ANSI_X3.4-1968编码而不是UTF-8

时间:2016-05-16 04:34:22

标签: python django encoding utf-8

我正在使用Django + Gunicorn + Nginx运行Ubuntu 14.04服务器。

Nginx配置包含utf-8字符集的行。

用户"拍卖"的区域设置输出(此用户运行服务器):

LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=en_US.utf8

此用户的文件系统编码:

sys.getfilesystemencoding()
'UTF-8'

但是当我在视图中调用相同的方法时,它会返回' ANSI_X3.4-1968'。

所以,我无法上传带有非拉丁文件名的文件。

我花了几天时间搜索解决方案,没有任何帮助。

如何解决?

1 个答案:

答案 0 :(得分:6)

这听起来像是在遇到bug # 13643

解决此问题的最简单方法是将环境变量PYTHONIOENCODING设置为utf-8

如果您使用的是虚拟环境,请确保在虚拟环境中明确设置;因为它可能无法读取全局变量。