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

Posted 软件测试杂谈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UnicodeEncodeError: ‘gbk’ codec can’t encode character u’u200e’ in position 43: illegal multib相关的知识,希望对你有一定的参考价值。

【问题】

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

 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                         break
14                 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.I
24             #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的主要内容,如果未能解决你的问题,请参考以下文章

UnicodeEncodeError: 'gbk' codec can't encode character 'xbb' in position

python写入文件中遇到 UnicodeEncodeError: ‘gbk’ codec can’t encode character 错误的解决办法

UnicodeEncodeError: 'gbk' codec can't encode character 'u25aa' in position 15: (

编码UnicodeEncodeError: 'gbk' codec can't encode character 'xa0' in position XX(

Python3中UnicodeEncodeError: 'gbk' codec can't encode character出错信息处理

UnicodeEncodeError: 'gbk' codec can't encode character 'xa0' in position 1987: (