Python 3优雅的方式将二进制输出打印到终端

时间:2014-06-11 00:06:18

标签: python-3.x

我写了一个小脚本,基本上在windows终端打印一些信息(使用希腊语cp737代码页)。它本质上是这样的:

while True:
    title = u'greek and other unichars follow:\t{}'.format(unicode_input())
    print title.encode('cp737','ignore')

输出:

greek and other unichars follow:    Καλημέρα!

按预期工作,终端打印大部分希腊字母,忽略了罕见的例外情况,这些例外情况无法转化为更受限制的cp737。

现在在python3中打印字节时,比如u" unitext" .encode(),输出到stdout字节对象' as-is':

b"greek and other unichars follow:\t\x89\x98\xa2\x9e\xa3\xe2\xa8\x98!"
  • 在终端中直接打印unicode最终会导致a UnicodeEncode错误。

  • 转换unicode - > bytes(cp737,ignore) - > unicode,似乎古怪。

这样做的优雅方式是什么?

1 个答案:

答案 0 :(得分:2)

对于Python 3,您可以选择几个选项:

  1. PYTHONIOENCODING环境变量设置为终端的编码。例如,您可以将其设置为PYTHONIOENCODING=cp737:ignore。然后,如果您使用print打印Unicode文本,它将自动转换为cp737字符集并正确输出。
  2. 在运行时重置sys.stdout的编码。请参阅此问题:How to set sys.stdout encoding in Python 3?
  3. 将编码的字节直接写入sys.stdout.buffer,绕过sys.stdout使用的编码机制。