我在跑./sample.py --url http://blah.com
没有错误,但如果我运行./sample.py --url http://blah.com | wc -l
或类似的我收到错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u200f' in position 0: ordinal not in range(128)
如何使 python 脚本与我的终端命令兼容?我不断看到参考sys.stdin.isatty
尽管它的用例似乎相反。
当Python检测到它正在打印到终端时,sys.stdout.encoding
设置为终端的编码。当你print
a unicode
, the unicode
被编码为str
使用sys.stdout.encoding
.
当Python没有检测到它正在打印到终端时,sys.stdout.encoding
被设定为None
。当你print
a unicode
, the ascii
使用编解码器(至少在Python2中)。如果以下情况,这将导致 UnicodeErrorunicode
包含 0-127 之外的代码点。
解决此问题的一种方法是显式编码您的unicode
打印前。这也许是正确的方法,但如果您有大量分散的打印语句,这可能会很费力。
解决此问题的另一种方法是设置Python编码 http://docs.python.org/2/using/cmdline.html#envvar-PYTHONIOENCODING环境变量到适当的编码。例如,
PYTHONIOENCODING=utf-8
然后将使用此编码而不是ascii
将输出打印到文件时。
See the 打印失败 wiki 页面 http://wiki.python.org/moin/PrintFails了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)