以下是应该引发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错误?
使用
答案 0 :(得分:2)
如果你只是将一个bytestring转换为unicode,比如
print unicode(s)
或在字符串格式化操作中混合使用unicode和bytestrings,就像你的例子一样,Python会依赖于系统默认编码(ascii
,除非它已被更改),并且隐式地会尝试编码unicode / decode使用ascii
编解码器的bytestring。
可以使用
显示当前活动的系统默认编码import sys
sys.getdefaultencoding()
现在看来Aptana Studio确实搞乱了你的解释器默认编码:
[...]看起来像是PyDev(Eclipse Python插件)。该 干扰源代码是 here。 看起来原因是与Eclipse控制台合作。然而 它做错了。而不是设置控制台编码, 编码设置为整个Python运行时环境,弄乱了 正在进行开发的目标运行时。
可以解决此问题。在 Eclipse Run ... 对话框设置中,您可以在公共标签上选择控制台编码。那里 是US-ASCII的可能值。我不确定Python 2的想法 “US-ASCII”编码名称,因为默认为“ ascii ”。
因此,请务必将默认设置重置为ascii
,您应该做得很好。