从Aptana Studio PyDev运行时取消抑制UnicodeEncodeError异常

时间:2014-08-11 19:26:28

标签: python django unicode python-unicode

以下是应该引发UnicodeEncodeError例外的声明:

print 'str+{}'.format(u'unicode:\u2019')

在Python shell中,异常会按预期引发:

>>> print 'str+{}'.format(u'unicode:\u2019')

Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    print 'str+{}'.format(u'unicode:\u2019')
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 8: ordinal not in range(128)

但是,如果我将该行放在settings.py的开头并从Aptana Studio启动Django服务器,则不会出现错误并打印此行:

str+unicode:’

但是如果我从shell中执行manage.py runserver,则会引发异常:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 8: ordinal not in range(128)

是否有某种Python设置可以无声地抑制这些unicode错误?

当我直接从Aptana Studio启动Django测试服务器时,如何防止忽略unicode错误?

使用

  • Python 2.7.3
  • Aptana Studio 3.3.2

1 个答案:

答案 0 :(得分:2)

如果你只是将一个bytestring转换为unicode,比如

print unicode(s)

或在字符串格式化操作中混合使用unicode和bytestrings,就像你的例子一样,Python会依赖于系统默认编码(ascii,除非它已被更改),并且隐式地会尝试编码unicode / decode使用ascii编解码器的bytestring。

可以使用

显示当前活动的系统默认编码
import sys
sys.getdefaultencoding()

现在看来Aptana Studio确实搞乱了你的解释器默认编码:

来自blog post by Mikko Ohtamaa

  

[...]看起来像是PyDev(Eclipse Python插件)。该   干扰源代码是   here。   看起来原因是与Eclipse控制台合作。然而   它做错了。而不是设置控制台编码,   编码设置为整个Python运行时环境,弄乱了   正在进行开发的目标运行时。

     

可以解决此问题。在 Eclipse Run ... 对话框设置中,您可以在公共标签上选择控制台编码。那里   是US-ASCII的可能值。我不确定Python 2的想法   “US-ASCII”编码名称,因为默认为“ ascii ”。

因此,请务必将默认设置重置为ascii,您应该做得很好。