解决python编码报错:UnicodeEncodeError: ‘ascii‘ codec can‘t encode character u‘\uff08‘ in position 13:ordin

解决python编码报错:UnicodeEncodeError: 'ascii' codec can't encode character u'\uff08' in position 13: ordinal not


   最近在手搓数据分析小项目时,需要借助于爬虫获取些数据,于是翻出去年暑假写的python爬虫代码,往常可以正常运行的代码,却总是报UnicodeEncodeError: 'ascii' codec can't encode character u'\uff08' in position 13: ordinal not的错误。

​    尝试网络上许多解决办法都行不通,提醒一下:博主使用windows平台pycharm:

​    网上的解决办法集中在修改编码的方式为utf-8,最多的代码格式如下:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

​    但是代码运行报错,显示NameError: name 'reload' is not defined,同时指出没有setdefaultcoding方法,后续查找相关资料,发现python2默认使用ASCII码处理中文,而python3默认就是utf-8编码方式,理论上将不应该出现报错,其他博文修改环境变量的方式博主并未尝试,读者可以自行进行尝试,这里提供一种简单有效的变更方法:

报错信息:
  File "C:\Users\腻味\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1198, in _encode_request
    return request.encode('ascii')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 83-85: ordinal not in range(128)

​    仔细查看报错信息,发现代码return request.encode('ascii'),好家伙,返回的内容使用ascii进行encode编码,难怪会报无法编解码的错误,问题找到啦,解决办法也就有了,进入client.py文件,修改编码方式为utf-8即可:

def _encode_request(self, request):
    # ASCII also helps prevent CVE-2019-9740.
    # return request.encode('ascii')
	return request.encode('utf-8')

​    再次运行代码就不会报错了!!!


下面给出博文在问题解决中参考的博文:

  1. UnicodeEncodeError: 'ascii' codec can't encode character u'\uff08' in position 13: ordinal not

    参考文献:(2条消息) python3遇到中文编码‘ascii‘ codec can‘t encode characters 的问题_python 打印中文报错 ascii_hjxu2016的博客-CSDN博客

    (2条消息) 终极解决方案UnicodeEncodeError: ‘ascii’ codec can’t encode character u’\uff08’ in position 13: ordinal not_csdn_yuan88的博客-CSDN博客

  2. NameError: name 'reload' is not defined

    参考文献:(2条消息) 解决NameError: name ‘reload‘ is not defined问题_缓步安歌的博客-CSDN博客

你可能感兴趣的:(python,爬虫,pycharm)