【Python】慢谈UnicodeEncodeError: ‘gbk‘ codec can‘t encode character ‘\xa0‘ in position 31 报错

最近在用python执行写入文件的程序时,出现了这个报错:

意思是将Unicode字符编码转为GBK时候出现了问题,可能是本身Unicode类型的字符中,包含了一些无法转换为GBK编码的一些字符;

所以我头脑中萌生出的第一种解决办法是把那些无法转换为GBK编码的字符给删了,转换不了的字符在报错中也说明了是’\xa0‘这个东西。于是我就修改了下代码。

from lxml import etree
import requests
url = "https://www.qb5.tw/book_51585/16647005.html"
resp = requests.get(url)
tree = etree.HTML(resp.text)
result = tree.xpath("/html/body/div[3]/div[2]/div[1]/text()")
a = ''.join(result)
b = a.replace('\xa0', "\n") #添加的代码
with open("a", mode="w") as f:
    f.write(b)
resp.close()

然后呢,它又给我报了类似的错误:

 额~,那就继续添加replace()咯。

b = a.replace('\xa0', "\n").replace('\ufffd', "")

OK,这次运行没有报错。

打开生成的文件看一下。

”额~~,这空行看起来真让人不舒服“,于是我吧“\n”去掉,结果跟加.....

 看来这种替换法在美观上行不通,于是我就试试另外一种办法。那就是在gbk解码时忽略掉不能解码的数据。

from lxml import etree
import requests
url = "https://www.qb5.tw/book_51585/16647005.html"
resp = requests.get(url)
tree = etree.HTML(resp.text)
result = tree.xpath("/html/body/div[3]/div[2]/div[1]/text()")
a = ''.join(result)#把列表转化为字符串
b = a.replace(' ', "\n")
print(b)
with open("a", mode="w") as f:
    f.write(b.encode("gbk","ignore").decode("gbk", "ignore"))#添加的代码

🆗成功执行,看看文件效果:

 比刚刚的输出好看多了。

所以在遇到这种报错时,可以直接用这种方法解决问题。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SamRol

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值