我正在使用一个简单的 python 脚本来获取我的 CID 的预订结果:simple.py
:
data = {"minorRev":"current minorRev #","cid":"xxx","apiKey":"xxx","customerIpAddress":" ","creationDateStart":"03/31/2013","}
url = 'http://someservice/services/rs/'
req = requests.get(url,params=data)
print req
print req.text
print req.status_code
现在,如果我这样做的话,在命令提示符下python simple.py
它运行完美并打印req.text
多变的
但是当我尝试做时
python simple.py | grep pattern
I get
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 1314: ordinal not in range(128)
print
needs在发送到 stdout 之前对字符串进行编码,但是当进程位于管道中时,sys.stdout.encoding
is None
, so print
收到一个unicode
对象,然后尝试使用以下方法对该对象进行编码ascii
编解码器——如果其中包含非 ASCII 字符unicode
对象,将引发异常。
你可以解决这个问题编码所有unicode
物体before将其发送到标准输出(但您需要猜测要使用哪个编解码器)。请参阅这些示例:
File wrong.py
:
# coding: utf-8
print u'Álvaro'
Result:
alvaro@ideas:/tmp
$ python wrong.py
Álvaro
alvaro@ideas:/tmp
$ python wrong.py | grep a
Traceback (most recent call last):
File "wrong.py", line 3, in <module>
print u'Álvaro'
UnicodeEncodeError: 'ascii' codec can't encode character u'\xc1' in position 0: ordinal not in range(128)
File right.py
:
# coding: utf-8
print u'Álvaro'.encode('utf-8')
# unicode object encoded == `str` in Python 2
Result:
alvaro@ideas:/tmp
$ python right.py
Álvaro
alvaro@ideas:/tmp
$ python right.py | grep a
Álvaro
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)