0

我的 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'

Envvars 用于 apache 运行级别脚本:

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

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

在我的 wsgi 文件中:

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

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

4

2 回答 2

0

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

于 2013-06-18T16:08:57.810 回答
0

您可以使用选项langlocaletoWSGIDaemonProcess子句。

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

于 2020-05-03T22:05:18.323 回答