在Python中使用BeautifulSoup处理编码问题
这个页面是用UTF-8编码的,用Python的HTMLParser解析的时候一切正常,没有出现UnicodeDecodeError
的错误。但是当我用BeautifulSoup来解析时,就出现了错误。我尝试了在各个地方加上_*_
编码:utf-8 _*_
,还有用.encode('utf-8')
,但还是出现了错误。
import urllib
from BeautifulSoup import BeautifulSoup
args=urllib.urlencode({'keywords':'magic'})
doc=urllib.urlopen('http://www.example.com/submit', args)
soup=BeautifulSoup(doc)
stuff = soup.findAll('section',id='banner')
print stuff
Traceback (most recent call last):
File "test.py", line 7, in <module>
print stuff
UnicodeEncodeError: 'ascii' codec can't encode character u'\xed' in position 112: ordinal not in range(128)
2 个回答
0
你在打印的时候不应该遇到 UnicodeEncodeError: 'ascii'..
这样的错误。这种情况通常是因为你的 locale
设置有问题,或者被设置成了 C
。这样一来,Python 就无法在输出流上使用合适的编码。
你可以运行 locale
命令,看看有没有错误或警告。
如果你无法修复你的 locale 设置,通常可以通过在环境中设置 PYTHONIOENCODING
来覆盖 Python 的输出编码,选择一个与你的终端模拟器匹配的编码。通常你可以使用:
export PYTHONIOENCODING=UTF-8
或者
PYTHONIOENCODING=UTF-8 python my_script.py
3
好的,我在最后一次尝试中找到了解决办法,也许这对遇到同样问题的人有帮助。
需要进行编码,而不是解码。
print( [e.encode('utf-8', 'ignore') for e in stuff] )