Python 3.x Python错误“无法对位置中的字符进行编码…”
我在返回线路时收到一个错误:Python 3.x Python错误“无法对位置中的字符进行编码…”,python-3.x,Python 3.x,我在返回线路时收到一个错误: print(page) 在下面的代码块中: import requests page = requests.get("https://fred.stlouisfed.org/series/IC4WSA") from bs4 import BeautifulSoup soup = BeautifulSoup(page.content, 'html.parser') print(soup) 返回的错误如下: return codecs.charmap_en
print(page)
在下面的代码块中:
import requests
page = requests.get("https://fred.stlouisfed.org/series/IC4WSA")
from bs4 import BeautifulSoup
soup = BeautifulSoup(page.content, 'html.parser')
print(soup)
返回的错误如下:
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position
22971-22979: character maps to <undefined>
我是否需要带有附加字符对象的python库来返回解析后的html?如果是,我如何确定返回解析的html值所需的对象/字符类型?我不确定如何查看位置22971-22979处的字符值
谢谢 这里发生的事情是,当Python试图向控制台打印一个字符串打印一个BeautifulSoup对象时,需要将unicode字符串转换为控制台可以显示的字节 将unicode转换为字节称为编码字符串。Python可以使用几种编码进行转换,UTF-8是其中之一,latin-1是另一种,cp1252 cp=代码页,Windows概念又是另一种。其中有很多,请参阅文档 您可以这样检查Python解释器将使用什么编码:
>>> import sys
>>> sys.stdout.encoding
'utf-8'
Python如何决定尝试使用何种编码取决于几个因素:
如果您在Windows上使用Python<3.6,则将使用当前的Windows控制台代码页。您可以使用环境变量pythonionencoding覆盖编码。
如果您在Windows上使用的是Python3.6,那么将使用utf-8编码,除非您设置了一些特殊的环境变量以使用传统的Windows编码功能。
根据您的错误,我猜您正在Windows上运行Python<3.6。该错误表示所选编码无法表示HTTP响应中的一个unicode字符。更改控制台或覆盖编码:
c:\> SET PYTHONIOENCODING=utf-8
c:\> python myscript.py
... you should not get an error, but the console will not be able to
display all characters correctly
如果您这样做:
c:\> python myscript.py > output.txt
例如,将输出重定向到一个文件,您可以在理解utf-8的文本编辑器中打开该文件,例如notepad++。我想您是指printsoup?您必须在Windows上,对吗?Python试图将输入UTF8转换为crummy!控制台字符集,它失败。也就是说。。。文本[22971:22979]仅显示空格。将控制台配置为接受UTF8并重试。感谢所有回复…我通过添加在控制台中打印的.encode'utf-8'覆盖了编码。另外,学习.txt输出方法也很有趣。再次感谢!