UnicodeEncodeError:'charmap'编解码器不能编码字符'\ u2014'Python Beautiful Soup

时间:2016-12-26 05:10:40

标签: python python-3.x beautifulsoup python-3.5

这是我的代码:

soup = bs4.BeautifulSoup(res.text, "html.parser")
linkElems = soup.select('.r a')

for i in range(len(linkElems)):
    t = linkElems[i].findAll(text=True)
    print(t)

这给了我错误:

  

Traceback(最近一次调用最后一次):文件“C:\ Path \ Python \ code.py”,   第17行,in       print(t)文件“C:\ Program Files \ Python 3.5 \ lib \ encodings \ cp437.py”,第19行,编码       return codecs.charmap_encode(input,self.errors,encoding_map)[0] UnicodeEncodeError:'charmap'编解码器不能编码字符'\ u2014'in   位置9:字符映射到

print(t)行给了我错误。

我正在使用Python 3和Beautiful Soup 4.我怎样才能摆脱这个错误?

1 个答案:

答案 0 :(得分:0)

打开文件时,使用的是CP437编码,该编码在您的操作系统上(未指定)为默认编码。

CP437在检查文件时遇到一个无法编码的字符(您未指定2014年Unicode字符,无论是十六进制还是十进制)。

因此,它会出错,告诉您它无法对字符进行编码。

解决此问题的方法是将编码更改为UTF-8,因为它可以解码所有Unicode字符,并且可能是文件真正编码的内容,因为UTF-8在世界范围内都在使用。

要将其更改为UTF-8,请使用以下代码:

soup = bs4.BeautifulSoup(res.text, "html.parser", encoding="utf-8")

这会将编码更改为UTF-8(因为我添加了encoding="utf-8"),因此,它现在执行的是C:\Program Files\Python 3.5\lib\encodings\cp437.py,它可以正确编码,而不是执行C:\Program Files\Python 3.5\lib\encodings\utf8.py进行编码。