IO操作报错—编码错误解决

文件操作典型错误:

在将爬虫抓取到的数据利用fp.read()写入html文件的时候,发生了这样一个错误

fp.write(resp.read().decode('utf-8'))
UnicodeEncodeError: 'gbk' codec can't encode character '\u265a' in position 29849: illegal multibyte sequence

原代码:

dapeng_url = 'http://www.renren.com/880151247/profile'

headers = {
    'User-Agent': ' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36',
    'Cookie':'anonymid=k9eczqdm-gfvnyo; depovince=SC; _r01_=1; JSESSIONID=abcMSkyFADL94d3mO1Sgx; taihe_bi_sdk_uid=1ebf7936c64f3f2130023bce5e6e2815; taihe_bi_sdk_session=ad4df8ad6b8edb53dcc8e7da0b0c8fa7; ick_login=8d910276-bd77-40b0-9102-74b47d9020ce; loginfrom=null; jebe_key=b3c7ff86-8e28-44dd-a55e-980db1344357%7Cd5e488df1f678d5bc1e4d38602b9674b%7C1587742685578%7C1%7C1587742686852; jebe_key=b3c7ff86-8e28-44dd-a55e-980db1344357%7Cd5e488df1f678d5bc1e4d38602b9674b%7C1587742685578%7C1%7C1587742686853; wp_fold=0; wp=0; t=018c8a38cd75aca63f06a7dcd81e56250; societyguester=018c8a38cd75aca63f06a7dcd81e56250; id=974296580; xnsid=5322372b; jebecookies=5f00a0cb-56fa-4d5b-a781-1ab4747cc148|||||; ver=7.0'
}
req = request.Request(url=dapeng_url,headers=headers)
resp = request.urlopen(req)
with open('./renren.html','w') as fp:
    # write函数必须写入一个str的数据类型
    # resp.read读出来的是bytes数据类型,所以需要转换
    # bytes--->decode--->str
    # str ---->encode--->bytes
    fp.write(resp.read().decode('utf-8'))

解决思路

encoding用于指定文件的编码方式,默认采用utf-8,编码方式主要是指文件中的字符编码。我们经常会碰到这样的情况,当打开一个文件时,内容全部是乱码,这是因为创建文件时采用的编码方式,和打开文件时的编码方式不一样,就会造成字符显示错误,看上去就是乱码。

通过在open()函数中添加encoding='utf-8',问题解决

with open('./renren.html','w',encoding='utf-8') as fp:
    # write函数必须写入一个str的数据类型
    # resp.read读出来的是bytes数据类型,所以需要转换
    # bytes--->decode--->str
    # str ---->encode--->bytes
    fp.write(resp.read().decode('utf-8'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值