【问题标题】:Django uses ANSI_X3.4-1968 encoding instead of UTF-8Django 使用 ANSI_X3.4-1968 编码而不是 UTF-8
【发布时间】:2016-09-11 19:41:03
【问题描述】:

我正在使用 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”。

所以,我不能上传非拉丁文件名的文件。

我用谷歌搜索了几天的解决方案,没有任何帮助。

如何解决?

【问题讨论】:

    标签: python django encoding utf-8


    【解决方案1】:

    这听起来你遇到了bug # 13643

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

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

    【讨论】:

    • 我在新贵的 conf 文件中添加了“env PYTHONIOENCODING='utf-8'”,它似乎可以工作。谢谢!
    • @arts777 能否更详细地解释一下 PYTHONIOENCODING='utf-8' 的放置位置
    • @VicNicethemer 如果你想在系统范围内设置它,你可以添加一个条目到/etc/security/pam_env.conf。这样,无论使用的 shell 和上下文如何,它都会受到尊重。
    猜你喜欢
    • 1970-01-01
    • 2018-07-22
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2015-12-07
    • 2016-07-23
    相关资源
    最近更新 更多