我正在使用带有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运行。
答案 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重写代码块。