【问题标题】:Django WSGI Python EncodingDjango WSGI Python 编码
【发布时间】:2013-06-18 09:23:33
【问题描述】:

我的 Django Apache Wsgi 设置有一个奇怪的问题。我最近将我的网站移至另一台服务器。不幸的是,现在编码有些混乱。当我运行这样的命令时:

barcode.generate_barcode("ean", "1341341234234")

生成的图像将在每个数字之间显示一些特殊字符,通常用于某些 endocing 问题。我猜它使用两个字节而不是一个字节来表示每个字符或类似的东西。

如果我使用 django ./manage.py runserver 命令运行相同的设置。生成的图像很好,没有添加特殊字符。

所以我得出结论,这一定与我的 apache2/mod_wsgi 设置有关。但版本与我的旧设置相同,即 debian 6、apache2.2、mod_wsgi 3.3.2。

我想尝试更新版本的 mod_wsgi 但编译失败。

谁能指出这个编码错误可能导致的正确方向?据我了解,WSGI 上下文以某种方式加载了带有错误编码的整个 python 脚本,否则我无法解释为什么硬编码的字符串在图像上会出错。

在 Apache conf.d/charset 中:

AddDefaultCharset UTF-8

另外在我的虚拟主机中:

AddDefaultCharset UTF-8

在 apache2/envvars 中:

export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'

在 apache 运行级别脚本中使用 Envvars:

if [ -z "$APACHE_ENVVARS" ] ; then
    APACHE_ENVVARS=$APACHE_CONFDIR/envvars
fi

我还尝试在运行级别脚本中硬编码覆盖环境变量。

在我的 wsgi 文件中:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

但似乎没有任何帮助。我的图像仍然是使用损坏的编码生成的。

【问题讨论】:

  • 可能与apache配置有关? stackoverflow.com/questions/913869/…
  • 我已经试过了。相应地更新我的问题
  • 以某种方式验证是否使用了 apache2/envvars。在许多 Linux 发行版上它没有被使用,您需要将这些行添加到 Apache 服务的 init.d 启动区域内的文件中。
  • 我已经调整了我的问题。默认使用 envvars。 initscript 中的硬代码覆盖也无济于事
  • @phlebas 你解决了这个问题吗?谢谢。

标签: django encoding wsgi


【解决方案1】:

将 mod_wsgi 升级到 3.4.0 版修复了它。

【讨论】:

    【解决方案2】:

    您可以在WSGIDaemonProcess 子句中使用langlocale 选项。

    https://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIDaemonProcess.html

    【讨论】:

      猜你喜欢
      • 2012-05-04
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 2017-04-18
      • 2012-09-09
      • 2015-03-14
      • 1970-01-01
      • 2015-01-24
      相关资源
      最近更新 更多