python“print”语句不起作用。
为避免此错误,
'ascii'编解码器无法解码位置0的字节0xec:序数不在范围内(128)
我在我的代码中添加了一些语句,如下所示
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
在代码之前,“print”效果很好。但是,在代码之后,“打印”不起作用。
print "A"
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print "B"
这里,我的计算机上只打印了“A”,Windows的Python2.7.3(64位)。 Python2.7 IDLE
我需要帮助
答案 0 :(得分:4)
由sys.setdefaultencoding
出于某种原因删除site
,您不应使用reload(sys)
来恢复它。相反,我的解决方案是什么也不做,Python会根据ENV LANG变量或Windows chcp
编码自动检测编码。
$ python
Python 2.7.3 (default, Sep 26 2012, 21:51:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import os
>>> sys.stdout.encoding
'UTF-8'
>>> os.environ["LANG"]
'pl_PL.UTF-8'
>>> print u"\xabtest\xbb"
«test»
>>>
但是,当编码没有您想要的字符时,这可能会导致问题。您应该尝试优雅地降级 - 显示所需字符的机会接近于0(因此您应该尝试使用纯ASCII版本,或使用Unidecode显示可用输出(或简单地失败))。您可以尝试捕获异常并打印基本版本的字符串。
$ LANG=C python
Python 2.7.3 (default, Sep 26 2012, 21:51:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import os
>>> sys.stdout.encoding
'ANSI_X3.4-1968'
>>> os.environ["LANG"]
'C'
>>> print u"\xabtest\xbb"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xab' in position 0: ordinal not in range(128)
>>>
但是有一个叫做Windows的问题,支持Unicode。虽然技术上chcp 65001
应该可以工作,但除非你使用的是Python 3.3,否则它实际上并不起作用。 Python使用可移植的stdio.h
,但cmd.exe
需要Windows特定的调用,如WriteConsoleW()
。实际上,只有8位编码可靠地工作(例如CP437)。
解决方法是使用正确支持Unicode的其他终端,例如Cygwin的控制台或Python附带的IDLE。