解决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')
再次运行代码就不会报错了!!!
下面给出博文在问题解决中参考的博文:
-
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博客
-
NameError: name 'reload' is not defined
参考文献:(2条消息) 解决NameError: name ‘reload‘ is not defined问题_缓步安歌的博客-CSDN博客