以下是应引发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:’


但是,如果我从外壳执行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

最佳答案

如果您只是将字节串转换为unicode,例如

print unicode(s)


或在示例中的字符串格式化操作中混合使用unicode和字节串,Python将退回到系统默认编码(除非更改,否则为ascii),并且隐式尝试使用编解码器。

当前活动的系统默认编码可以与

import sys
sys.getdefaultencoding()


现在看来,Aptana Studio实际上确实与您的解释器的默认编码混淆了:

blog post by Mikko Ohtamaa


  [...]看起来像是PyDev(Eclipse Python插件)。的
  干扰源代码是
  here
  看起来原因是与Eclipse控制台合作。然而
  它做错了。无需设置控制台编码,
  编码设置为整个Python运行时环境,混乱了
  完成开发的目标运行时。
  
  有可能解决此问题。在Eclipse Run…对话框设置中,可以在Common选项卡上选择Console Encoding。那里
  是可能的值US-ASCII。我不确定Python 2的想法
  “ US-ASCII”编码名称,因为默认值为“ ascii”。


因此,请确保将默认值重置为ascii,并且应该很好。

关于python - 从Aptana Studio PyDev运行时取消抑制UnicodeEncodeError异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25250857/

10-13 04:06
查看更多