分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

UnicodeEncodeError: ‘gbk’ codec can’t encode character u’u200e’ in position 43: illegal multib

发布时间:2023-09-06 01:46责任编辑:苏小强关键词:暂无标签

【问题】

在执行代码时,提示上述错误,源码如下:

 1 # 下载小说... 2 def download_stoy(crawl_list,header): 3 ?4 ????# 创建文件流,将各个章节读入内存 5 ????with open(‘E:\盗墓test22.txt‘, ‘w‘) as f: 6 ????????for each_url in crawl_list: 7 ????????????# 有的时候访问某个网页会一直得不到响应,程序就会卡到那里,我让他0.6秒后自动超时而抛出异常 8 ????????????while True: 9 ????????????????try:10 ????????????????????request = urllib.request.Request(url=each_url, headers=header)11 ????????????????????with urllib.request.urlopen(request, timeout=0.6) as response:12 ????????????????????????html = response.read().decode(‘utf-8‘)13 ????????????????????????break14 ????????????????except:15 ????????????????????# 对于抓取到的异常,让程序停止1.1秒,再循环重新访问这个链接,访问成功时退出循环16 ????????????????????time.sleep(1.1)17 18 ????????????# 匹配文章标题19 ????????????title_req = re.compile(r‘<h1>(.+?)</h1>‘)20 ????????????# 匹配文章内容,内容中有换行,所以使flags=re.S ?re.S表示跨行匹配21 ????????????#content_req = re.compile(r‘<div class ="content-body">(.+)</div>‘, re.S)22 ????????????content_req = re.compile(r‘<p>(.*?)</p>‘, re.S)23 ????????????#"<div[^>]+>.+?<div>(.+?)</div></div>", re.I24 ????????????#content_req = re.compile(r‘<div[^>]+>.+?<div>(.+?)</div></div>‘, re.S)25 ????????????# 获取标题26 ????????????title = title_req.findall(html)[0]27 ????????????# 获取内容28 ????????????content_test = content_req.findall(html)29 ????????????print(‘抓取章节>‘ + title)30 ????????????f.write(title + ‘\n‘)31 ????????????#print(content_test)32 ????????????for each in content_test:33 ????????????????# 筛除不需要的的html元素34 ????????????????str1 = each.replace(‘&ldquo;‘, ‘ ‘)35 ????????????????str2 = str1.replace(‘&hellip;‘, ‘ ‘)36 ????????????????str3 = str2.replace(‘&rdquo;‘,‘ ‘)37 ????????????????f.write(str3 + ‘\n‘)

【解决过程】

1. 再次确认其编码格式,确实是utf-8;

2.此问题觉得很诡异的是,本身调用UTF-8去decode,但是解码出错却提示的是GBK的,而不是UTF-8相关解码出错。

3.找了其他帖子,尝试在解码时添加ignore 属性,但没有解决。文中提供的第二种解释,直觉不是这个原因。继续找其他帖子。

https://www.crifan.com/unicodeencodeerror_gbk_codec_can_not_encode_character_in_position_illegal_multibyte_sequence/

4.又找到一个,

http://www.jb51.net/article/64816.htm

根据提示,在文件打开时添加 encoding=‘utf-8‘, 即,

 ???with open(‘E:\盗墓test22.txt‘, ‘w‘,encoding=‘utf-8‘) as f:

问题解决。


【参考】

【总结】Python 2.x中常见字符编码和解码方面的错误及其解决办法

UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\u200e’ in position 43: illegal multib

原文地址:https://www.cnblogs.com/scios/p/8624419.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved