zoukankan      html  css  js  c++  java
  • 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 + '
    ')
    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 + '
    ')

    【解决过程】

    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中常见字符编码和解码方面的错误及其解决办法

  • 相关阅读:
    判断jquery.表单验证插件是否通过验证的解决办法
    查看网站收录情况
    js面向对象基础拾遗
    查看显卡信息的DOS命令
    关于OR Mapping
    推荐两篇文章
    读书
    测试开发驱动实践
    粗略看Hibernate的代码
    开发源码的数据库群集中间件 CJDBC
  • 原文地址:https://www.cnblogs.com/scios/p/8624419.html
Copyright © 2011-2022 走看看