【问题】
用Python抓取网页html
出现如下错误:
exception raised:'gbk' codec can't encode character u'\xa0' in position 73: illegal multibyte sequence
【问题原因】
对于此Unicode字符(html),需要print出来的话,由于本地系统是Windows中的cmd,默认codepage是CP936,即GBK的编码,所以python解释器需要先将上述的Unicode字符html编码为GBK,然后再在cmd中显示出来。
【解决办法】
方案1:
在对unicode字符编码时,添加ignore参数,忽略无法无法编码的字符,这样就可以正常编码为GBK了。
对应代码为:
print html.encode(“GBK“,‘ignore’);
方案2:
或者,将其转换为GBK编码的超集GB18030(即,GBK是GB18030的子集):
print html.encode(“GB18030“);
对应的得到的字符是GB18030的编码。
新问题出现:
改了代码之后,虽然没有报之前的那个错误,但是打印出来文字,英文文字没有出现乱码,但是中文出现乱码的情况
添加以下代码即可解决问题:
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')