Python UnicodeDecodeError:&x27;utf8';编解码器可以';t解码位置51中的字节0x89:无效的起始字节

Python UnicodeDecodeError:&x27;utf8';编解码器可以';t解码位置51中的字节0x89:无效的起始字节,python,utf-8,Python,Utf 8,编译“QRCODE.py”时出错 回溯(最近一次呼叫最后一次): jayu@jayu:~/Desktop$python QRCODE.py 输入您的选择:3 输入URL以获取二维码:http://www.google.com 回溯(最近一次呼叫最后一次): 文件“QRCODE.py”,第29行,在 app.generateQRcode() generateQRcode中第19行的文件“QRCODE.py” self.shortener.short(self.url) 文件“/home/jayu/

编译“QRCODE.py”时出错

回溯(最近一次呼叫最后一次):

jayu@jayu:~/Desktop$python QRCODE.py
输入您的选择:3
输入URL以获取二维码:http://www.google.com
回溯(最近一次呼叫最后一次):
文件“QRCODE.py”,第29行,在
app.generateQRcode()
generateQRcode中第19行的文件“QRCODE.py”
self.shortener.short(self.url)
文件“/home/jayu/.local/lib/python2.7/site packages/pyshorteners/shorteners/_init__.py”,简而言之,第115行
self.shorten=self.\u类(**self.kwargs).short(url)
文件“/home/jayu/.local/lib/python2.7/site packages/pyshorteners/shorteners/googl.py”,简而言之,第25行
response=self.\u post(url,data=params,headers=headers)
文件“/home/jayu/.local/lib/python2.7/site packages/pyshorteners/shorteners/base.py”,第32行,在
timeout=self.kwargs['timeout'])
文件“/home/jayu/.local/lib/python2.7/site packages/requests/api.py”,post第112行
返回请求('post',url,data=data,json=json,**kwargs)
文件“/home/jayu/.local/lib/python2.7/site packages/requests/api.py”,请求中的第58行
return session.request(method=method,url=url,**kwargs)
文件“/home/jayu/.local/lib/python2.7/site packages/requests/sessions.py”,第498行,请求中
准备=自我准备请求(req)
文件“/home/jayu/.local/lib/python2.7/site packages/requests/sessions.py”,第441行,在prepare\u请求中
钩子=合并钩子(request.hooks,self.hooks),
文件“/home/jayu/.local/lib/python2.7/site packages/requests/models.py”,第309行,在prepare中
self.prepare_url(url,参数)
文件“/home/jayu/.local/lib/python2.7/site packages/requests/models.py”,第359行,在prepare\u url中
url=url.decode('utf8')
文件“/usr/lib/python2.7/encodings/utf_8.py”,第16行,解码
返回编解码器.utf_8_解码(输入,错误,真)
UnicodeDecodeError:“utf8”编解码器无法解码位置51中的字节0x89:无效的开始字节
错误的原因是什么?Python的版本是2.7.15rc1 每次我尝试运行python QRCODE.py时,我在回溯中都得到了相同的位置N


有人能纠正我吗?

如果在open(…)函数中有此问题,则需要在此函数中设置编码

fo = open(filename, something_else, encoding = 'UTF-8')
但它只能在python3中工作,在Python2中,您需要使用io.open:

fo = io.open(filename, something else, encoding = 'UTF-8') 

转到谷歌我不知道完整的sintax,但我已经回答了这里的问题:

你说“回溯”,但我没有看到任何回溯。回溯到哪里去了?看起来像是
Shortener('Google',api_key=apiKey)
需要一个字符串作为
api_key
,但您似乎在传递png文件的内容?这是怎么回事?PNG文件总是以
b'\x89PNG\r\n\x1a\n'
开头,这不是有效的UTF-8字符串,因此出现错误。如果您确实需要读取PNG文件,请以二进制模式而不是文本模式读取。但为什么要将PNG数据作为“API密钥”传递?
fo = open(filename, something_else, encoding = 'UTF-8')
fo = io.open(filename, something else, encoding = 'UTF-8')