错误描述
最近在学习 py3 的爬虫时,遇到了一个编码的问题,在抓取页面的 html 代码进行存储时:
with open(filename,'w') as f: f.write(html)
出现了错误,错误详情如下:
UnicodeEncodeError: 'gbk' codec can't encode character '\U0001f434' in position xxxxxx: illegal multibyte sequence
不是原因的原因
搜索的很多资料都提示使用各种 encode() decode() 和 'utf-8' 'gbk' 之类的处理方法:
- encode()转化之后,得到的是byte字节流,用于传输等途径的使用。
- decode()转化相应的到的就是字符串了。
- 在这里程序是要将 网络数据流 (byte) 写入到文件中 (str) ,那么我们需要做的就是 byte —— decode() ——>str 的一个过程
- 在 windows 下,新文件默认的编码是 gbk 编码,所以 python 解释器,就将我们的 unicode 编码内容,当做 gbk 编码进行处理。(在我的环境下,使用 print(chardet.detect(html)) 看到的是 'Windows-1254’ ^(* ̄(oo) ̄)^ )
然后就报出了这个错误 = =
解决方法
就是指定要写入的文件的编码方式,即通过我想要的utf-8打开并写入
f = open("out.html","w",encoding='utf-8')
参考资料
https://www.cnblogs.com/themost/p/6603409.html
https://blog.csdn.net/chixujohnny/article/details/51782826
https://www.jianshu.com/p/6cbb2b14cda9