UnicodeEncodeError:“字符映射”编解码器不能编码字符UnicodeEncodeEr

2019-05-10 10:26发布

我想刮一个网站,但它给我一个错误。

我使用下面的代码:

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>

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

Answer 1:

我通过添加固定它.encode("utf-8")soup

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



Answer 2:

我得到同样的UnicodeEncodeError节约刮网页内容到一个文件时。 要解决它,我换成这样的代码:

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

有了这个:

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

使用io为您提供了与Python 2向后兼容性。

如果你只需要支持Python 3中,你可以使用内置的open函数:

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


Answer 3:

在Python 3.7,并运行Windows 10这个工作(我不知道它是否会在其他平台和/或Python的其他版本的)

更换这行:

with open('filename', 'w') as f:

有了这个:

with open('filename', 'w', encoding='utf-8') as f:

为什么这是工作的原因是因为使用文件时的编码改为UTF-8,所以在人物UTF-8能够被转换,而不是在遇到一个UTF-8字符是返回一个错误的文字,不是由当前编码suppord。



Answer 4:

对于那些仍然收到此错误,将encode("utf-8")soup也将解决这个问题。

soup = BeautifulSoup(html_doc, 'html.parser').encode("utf-8")
print(soup)


Answer 5:

同时节约GET请求的响应,同样的错误是关于Python 3.7的窗口10.从URL接收的响应抛出,编码为UTF-8,因此始终建议检查编码,以便同样可以通过避免这样的小事因为它确实杀死了大量的时间在生产

import requests
resp = requests.get('https://en.wikipedia.org/wiki/NIFTY_50')
print(resp.encoding)
with open ('NiftyList.txt', 'w') as f:
    f.write(resp.text)

当我添加编码=“UTF-8”与开放命令它的文件具有正确的响应保存

with open ('NiftyList.txt', 'w', encoding="utf-8") as f:
    f.write(resp.text)


文章来源: UnicodeEncodeError: 'charmap' codec can't encode characters