UnicodeEncodeError:“charmap”编解码器无法编码字符

新手上路,请多包涵

我正在尝试抓取一个网站,但它给了我一个错误。

我正在使用以下代码:

 import urllib.request
from bs4 import BeautifulSoup

get = urllib.request.urlopen("https://www.website.com/")
html = get.read()

soup = BeautifulSoup(html)

print(soup)

我收到以下错误:

 File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 70924-70950: character maps to <undefined>

我能做些什么来解决这个问题?

原文由 SstrykerR 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.5k
2 个回答

我通过将 .encode("utf-8") 添加到 soup 来修复它。

这意味着 print(soup) 变为 print(soup.encode("utf-8"))

原文由 SstrykerR 发布,翻译遵循 CC BY-SA 4.0 许可协议

将抓取的 Web 内容保存到文件时,我得到了相同的 UnicodeEncodeError 。为了修复它,我替换了这段代码:

 with open(fname, "w") as f:
    f.write(html)

有了这个:

 with open(fname, "w", encoding="utf-8") as f:
    f.write(html)

如果你需要支持 Python 2,那么使用这个:

 import io
with io.open(fname, "w", encoding="utf-8") as f:
    f.write(html)

如果您想使用不同于 UTF-8 的编码,请为 encoding 指定您的实际编码。

原文由 twasbrillig 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题