1

我正在使用 Apache2 和 mod_wsgi 来部署 Flask 应用程序。

当使用 pydev 从 Eclipse 运行时(即使用 Eclipse 中的“运行”菜单图标),该应用程序运行良好。

但是,当从 Eclipse 外部运行完全相同的代码时(通过从命令行调用脚本或通过 mod_wsgi)UnicodeDecodeError会引发 a 并且无法显示页面。

这是(缩短的)有问题的代码:

label = 'créer'
row = '<tr><td>{cell_label}</td></tr>'.format(cell_label = label)
render_template('template.html', row = row)

template.html 包含:

<table>
    {{ row | safe }}
</table>

并且引发的错误是:

'<tr><td>{cell_label}</td></tr>'.format(cell_label = label)
UnicodeEncodeError: 'ascii' codec can't encode character u'\\xe9' in position 7: ordinal not in range(128)

其他信息

  • echo $LANG返回:

    en_US.UTF-8

  • file flask_app.py returns

    Python 脚本,UTF-8 Unicode 文本可执行文件

  • 当我从 Ecpise 运行代码和进行测试时,我使用相同的解释器(virtualenv 中的 python 2.7.3)。

编辑

更改的问题标题和描述反映了代码只能通过 Eclipse 运行的事实。

4

1 回答 1

0

我在另外两个已回答的问题中找到了解决方案:

识别问题

Eclipse+PyDev 中的 unicode 字符串容错

基本上,问题在于 Pydev 在后台更改了 python 的默认编码。这意味着包含非 ASCII 字符的代码在使用 Pydev 通过 Eclipse 运行时工作得很好,可能会在任何其他上下文中崩溃。

寻找解决方案

如何在 Python < 3 中将 UTF-8 编码的文本打印到控制台?

不应更改默认编码。基思的回答给出了一个解决方法,但它真的不应该被使用。唯一好的解决方案是意识到 Pydev 的环境是非标准的,只需重写代码块。

于 2013-09-17T14:01:45.527 回答