我想知道为什么我可以使用print在我的OSX Terminal.app中打印unicode字符串,但是如果我将stdout重定向到文件或将其传递给'more',我会得到一个UnicodeEncodeError。 python如何决定是打印unicode还是抛出异常。
答案 0 :(得分:2)
因为您的终端编码设置正确,并且当您重定向到文件(或管道)时,编码被设置为默认编码(python2中的ASCII。),请在两次尝试print sys.stdout.encoding
时(运行脚本时)作为stdout的终端,当你重定向到文件时),你会看到差异。
在命令行中尝试此操作:
$ python -c 'import sys; print sys.stdout.encoding;'
UTF8
$ python -c 'import sys; print sys.stdout.encoding;' | cat
None
可以找到更多信息HERE: