2016-11-23 61 views
0

这里是我的脚本的含量降低了:Python的非ASCII字符扼流圈时,输出到UNIX管道

print u"w\xa0p" 

,它将打印字母“W”,接着不间断空格,然后“P”到TTY。然而,当这个脚本被传递给管道时,例如

python script.py | cat 

(在管道右侧的确切指令并不重要,只要蟒蛇命令传递到UNIX管道),Python会用这种错误的抱怨:

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

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

回答

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