【发布时间】:2011-10-24 05:01:53
【问题描述】:
我想知道为什么我可以在我的 OSX Terminal.app 中使用 print 打印一个 unicode 字符串,但是如果我将 stdout 重定向到一个文件或将它通过管道传输到“更多”,我会得到一个 UnicodeEncodeError。 python如何判断是打印unicode还是抛出异常。
【问题讨论】:
-
您能否提供一个简短的示例脚本来显示行为差异?
我想知道为什么我可以在我的 OSX Terminal.app 中使用 print 打印一个 unicode 字符串,但是如果我将 stdout 重定向到一个文件或将它通过管道传输到“更多”,我会得到一个 UnicodeEncodeError。 python如何判断是打印unicode还是抛出异常。
【问题讨论】:
因为您的终端编码设置正确,并且当您重定向到文件(或管道)时,编码设置为默认编码(python2 中的 ASCII。)尝试print sys.stdout.encoding 两次(当您将脚本作为终端作为标准输出,当您重定向到文件时),您将看到不同之处。
在你的命令行中也试试这个:
$ python -c 'import sys; print sys.stdout.encoding;'
UTF8
$ python -c 'import sys; print sys.stdout.encoding;' | cat
None
更多信息可以找到HERE:
【讨论】: