• Python3 关于UnicodeDecodeError/UnicodeEncodeError: ‘gbk’ codec can’t decode/encode bytes类似的文本编码问题


      以下是小白的爬虫学习历程中遇到并解决的一些困难,希望写出来给后来人,如有疏漏恳请大牛指正,不胜感谢!

      首先,我的代码是这样的

    复制代码
    1 
    2 
    3 import requests
    4 
    5 url = 'http://www.acfun.tv/' 
    6 html = requests.get(url)
    7 
    8 print(html.text)
    复制代码

     

    python2中解决方法(题外话)

    参考:http://www.cnblogs.com/zhaoyl/p/3770340.html

    在前面加上以下代码即可

    import sys 
    reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入 
    sys.setdefaultencoding('utf-8')

    一般就能解决了

    而在Python3中:

    如果在控制台中运行,就遇到了如下的UnicodeEncodeError:

      

    1.原因

      #参考了http://www.tuicool.com/articles/nEjiEv

      首先,代码中的html.text会自动将获取的内容解析为unicode  (与html.content不同。两者区别就是html.content的类型是bytes,而html.text类型是str,bytes通过解码(decode)可以得到str,str通过编码(encode)得到bytes)    html.text这种字符串如果要输出应当用utf-8来编码。而cmd中,(对于多数中国人所用的是中文的系统)默认字符编码是gbk

      从而导致此种现象:

      python要将utf-8编码的字符串,在gbk的cmd的中打印出来。于是出现了编码错误

    2.解决方法

       1. 运行CMD;

         2. 输入 CHCP,回车查看当前的编码;

         3. 输入CHCP 65001(序号65001代表utf-8),回车;

         4. 仅如此,还是不能支持UTF8的正常显示,你还要在窗体上右键,选择属性,来设置字体;

         5. 操作完上面几步后,即使你原来的字体里面没有显示Lucida Console这个字体,现在应该也能看到了。选择它。如果原来就有,可以选上它先试试,不行在执行上述步骤。

        (参考http://blog.useasp.net/archive/2012/04/24/how_to_use_UTF8_encoding_in_Windows_CMD.aspx)

    如果还是不懂,请自行百度:在cmd上显示utf-8。

         

    你也可以使用Pycharm这个IDE来运行查看结果,中文部分就能正常显示了。

      

      

    写入文件时引发的UnicodeEncodeError:

    参考:https://segmentfault.com/a/1190000004269037

      在测试过程中多次出现在写入文件时报告错误“UnicodeEncodeError: 'ascii' codec can't encode character 'u56de' in position 0: ordinal not in range(128)”,这是由于我们在抓取网页的时候采用的是UTF-8编码,而存储时没有指定编码,在存储到文件的过程中就会报错。

      解决办法为:
    在读取文件时加入指定UTF-8编码的选项

    f = open('content.txt','a',encoding='UTF-8')

    另外需要注意的是使用requests获取到网页之后同样要指定编码

    html = requests.get(url)
    html = re.sub(r'charset=(/w*)', 'charset=UTF-8', html.text)
  • 相关阅读:
    xhtml+css (网站重构)
    一个典型的代码走查检查单
    谈谈单位时间内投票次数限制
    .NET性能优化方面的总结
    IE6.0、IE7.0 与 FireFox CSS
    vue3中使用 aggrid 表格组件
    基于predis高并发情况下实现频率控制的函数
    Redis之Centos下使用redis
    SVN的安装和使用
    Git配置教程
  • 原文地址:https://www.cnblogs.com/zhangdingqu/p/9777660.html
Copyright © 2020-2023  润新知