【问题标题】:Strange python print behavior with unicode使用 unicode 的奇怪 python 打印行为
【发布时间】:2011-10-24 05:01:53
【问题描述】:

我想知道为什么我可以在我的 OSX Terminal.app 中使用 print 打印一个 unicode 字符串,但是如果我将 stdout 重定向到一个文件或将它通过管道传输到“更多”,我会得到一个 UnicodeEncodeError。 python如何判断是打印unicode还是抛出异常。

【问题讨论】:

  • 您能否提供一个简短的示例脚本来显示行为差异?

标签: python macos unicode


【解决方案1】:

因为您的终端编码设置正确,并且当您重定向到文件(或管道)时,编码设置为默认编码(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:

【讨论】:

  • 如果要控制管道的编码,请使用环境变量 PYTHONIOENCODING。
  • 程序在管道上运行时的行为不应有所不同。 这是另一个与 Unicode 相关的愚蠢错误,其中 Python 向后卷曲以安抚歇斯底里的海豚群。它应该被修复。
  • @tchrist: 这个问题在 python3 中得到解决,默认编码不再是 ASCII。
猜你喜欢
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 2021-09-28
相关资源
最近更新 更多