UnicodeDecodeError Python错误

UnicodeDecodeError Python错误,python,unicode,Python,Unicode,我正在尝试编写一个python google api。获取一些unicode问题。到目前为止,我真正的基本PoC是: #!/usr/bin/env python import urllib2 from bs4 import BeautifulSoup query = "filetype%3Apdf" url = "http://www.google.com/search?sclient=psy-ab&hl=en&site=&source=hp&q=

我正在尝试编写一个python google api。获取一些unicode问题。到目前为止,我真正的基本PoC是:

#!/usr/bin/env python
import urllib2
from bs4 import BeautifulSoup        
query = "filetype%3Apdf"
url = "http://www.google.com/search?sclient=psy-ab&hl=en&site=&source=hp&q="+query+"&btnG=Search"
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
response = opener.open(url)
data = response.read()
data = data.decode('UTF-8', 'ignore')
data = data.encode('UTF-8', 'ignore')
soup = BeautifulSoup(data)
print u""+soup.prettify('UTF-8')
我的回溯是:

Traceback (most recent call last):
  File "./google.py", line 22, in <module>
print u""+soup.prettify('UTF-8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 48786: ordinal not in range(128)
回溯(最近一次呼叫最后一次):
文件“/google.py”,第22行,在
打印u“+汤。美化('UTF-8')
UnicodeDecodeError:“ascii”编解码器无法解码位置48786处的字节0xc2:序号不在范围内(128)

有什么想法吗?

您正在将
soup
树转换为
UTF-8
(一个编码字节字符串),然后尝试将其连接到一个空的
u'
unicode字符串

Python将自动尝试使用默认编码(即
ASCII
)对编码的字节字符串进行解码,但无法对
UTF-8
数据进行解码

您需要显式解码
prettify()
输出:

print u"" + soup.prettify('UTF-8').decode('UTF-8')

本文对此进行了更好的解释,包括关于默认编码。我真的,真的建议你也阅读Joel Spolsky的。

你正在将你的
soup
树转换为
UTF-8
(一个编码字节字符串),然后尝试将其连接到一个空的
u'
unicode字符串

Python将自动尝试使用默认编码(即
ASCII
)对编码的字节字符串进行解码,但无法对
UTF-8
数据进行解码

您需要显式解码
prettify()
输出:

print u"" + soup.prettify('UTF-8').decode('UTF-8')
本文对此进行了更好的解释,包括关于默认编码。我真的,真的建议你也读乔尔·斯波尔斯基的