从Eclipse外部运行时,Flask代码会引发UnicodeDecodeError(仅限)

时间:2013-09-13 15:39:40

标签: python eclipse utf-8 flask pydev

我正在使用带有mod_wsgi的Apache2来部署Flask应用程序。

当使用pydev从Eclipse运行时(即使用Eclipse中的“运行”菜单图标),此应用程序可以正常运行。

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

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

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文本可执行文件

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

修改

更改了反映事实的问题标题和说明,而不是代码只能通过Eclipse运行。

1 个答案:

答案 0 :(得分:0)

我在其他两个问题中找到了解决方案:

识别问题

unicode string tolerance in Eclipse+PyDev

基本上,出了什么问题是Pydev在后台改变了python的默认编码。这意味着包含非ASCII字符的代码在使用Pydev在Eclipse中运行时效果很好,可能会在任何其他上下文中崩溃。

寻找解决方案

How to print UTF-8 encoded text to the console in Python < 3?

不应更改默认编码。 Keith的回答提供了一种解决方法,但确实不应该使用它。唯一好的解决方案是认识到Pydev的环境是非标准的,并且是juste重写代码块。