当输出到UNIX管道时,Python会阻塞非ascii字符

时间:2016-11-23 18:35:03

标签: python unix pipe

以下是我脚本的缩减内容:

print u"w\xa0p"

将打印" w"字符,然后是一个不间断的空间,然后" p"到TTY。但是,当此脚本传递给管道时,例如

python script.py | cat

(管道右侧的确切命令并不重要,只要将python命令传递到UNIX管道上),python就会抱怨这种错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 1: ordinal not in range(128)

有人可以解释为什么会发生这种错误,以及如何缓解这种错误?显然有一个不同的编解码器,我想我们可以使用unidecode包来减轻问题,但代价是字符精度;但我想知道如果输出管道正在使用中,我们是否可以强制python打印出utf-8字符。

1 个答案:

答案 0 :(得分:0)

看看这个问题,你遇到的问题是UnicodeDecodeError when redirecting to file

您应该阅读EOL的所有答案以了解问题,但如果您匆忙,这是您需要使用的代码的重要部分:

import codecs
import locale
import sys

# Wrap sys.stdout into a StreamWriter to allow writing unicode.
sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout)

uni = u"w\xa0p"
print uni