gpt4 book ai didi

python : UnicodeEncodeError when I use grep

转载 作者:太空狗 更新时间:2023-10-29 18:16:51 24 4
gpt4 key购买 nike

我正在使用一个简单的 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

我明白了

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

最佳答案

print 需要 在发送到 stdout 之前对字符串进行编码,但是当进程在管道中时,sys.stdout.encoding 的值> 是 None,所以 print 接收到一个 unicode 对象,然后它尝试使用 ascii 编解码器对该对象进行编码-- 如果您在此 unicode 对象中包含非 ASCII 字符,则会引发异常。

您可以在将所有 unicode 对象发送到标准输出之前对其进行编码来解决这个问题(但您需要猜测要使用哪个编解码器)。请参阅以下示例:

文件wrong.py:

# coding: utf-8

print u'Álvaro'

结果:

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)

文件right.py:

# coding: utf-8

print u'Álvaro'.encode('utf-8')
# unicode object encoded == `str` in Python 2

结果:

alvaro@ideas:/tmp
$ python right.py
Álvaro
alvaro@ideas:/tmp
$ python right.py | grep a
Álvaro

关于 python : UnicodeEncodeError when I use grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15739029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com