以下是我脚本的缩减内容:
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字符。
答案 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