UnicodeEncodeError: 'gbk' codec can't encode character '\ufffd' in position 146: illegal multibyte s

错误信息让人很困惑,为什么用的是’utf-8’解码,错误信息却提示’gbk’错误呢?

在python3里,有几点关于编码的常识

字符就是unicode字符,字符串就是unicode字符数组

原来是print()函数自身有限制,不能完全打印所有的unicode字符。知道原因后,google了一下解决方法,其实print()函数的局限就是Python默认编码的局限,因为系统是win7的,python的默认编码不是’utf-8’,改一下python的默认编码成’utf-8’就行了

import io
import sys
import urllib.request
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码
html = requests.get(url)
html.encoding = 'utf-8'
sp = BeautifulSoup(html.text,'html.parser')
print(sp)

具体来说就是我在cmd下运行该脚本会有乱码,而在IDLE下运行却很正常。

cmd不能很好地兼容utf8,而IDLE就可以,甚至在IDLE下运行,连“改变标准输出的默认编码”都不用,因为它默认就是utf8。

你可能感兴趣的:(UnicodeEncodeError: 'gbk' codec can't encode character '\ufffd' in position 146: illegal multibyte s)