PY3读写文件编码小笔记


错误描述

最近在学习 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

 


 

你可能感兴趣的:(python)