UnicodeDecodeError:'utf8'编解码器无法解码位置51的字节0x89:无效的起始字节

时间:2018-07-27 16:19:54

标签: python utf-8

编译“ QRCODE.py”时发生错误

from pyshorteners import Shortener

class Shortening():
    def __init__(self):
        self.shortener=Shortener('Tinyurl')
        fo = open('/home/jayu/Desktop/qr.png','r+')
        apiKey = fo.read()
        self.shortener = Shortener('Google',api_key = apiKey)
    def shortenURL(self):
        self.url = raw_input("Enter The Url to shortener : ");
        shortener = self.shortener.short(self.url)
        print ("the short url : " +shortenURL) 
    def decodeURL(self):
        self.url = raw_input("Enter The Url to expand: ");
        expandURL = self.shortener.expand(self.url)
        print ("the short url : " +expandURL);
    def generateQRcode(self):
        self.url = raw_input("Enter the URL to get QR code :")
        self.shortener.short(self.url)
        print (self.shortener.qrcode(150,150))
app = Shortening()
option = int (input("Enter ur choice : "))

if option==1:
    app.shortenURL()
elif option==2:
    decodeURL()
elif option==3:
    app.generateQRcode()
else:
    print ("wrong ")

回溯(最近通话最近一次):

jayu@jayu:~/Desktop$ python QRCODE.py 
Enter ur choice : 3
Enter the URL to get QR code :http://www.google.com
Traceback (most recent call last):
  File "QRCODE.py", line 29, in <module>
    app.generateQRcode()
  File "QRCODE.py", line 19, in generateQRcode
    self.shortener.short(self.url)
  File "/home/jayu/.local/lib/python2.7/site-packages/pyshorteners/shorteners/__init__.py", line 115, in short
    self.shorten = self._class(**self.kwargs).short(url)
  File "/home/jayu/.local/lib/python2.7/site-packages/pyshorteners/shorteners/googl.py", line 25, in short
    response = self._post(url, data=params, headers=headers)
  File "/home/jayu/.local/lib/python2.7/site-packages/pyshorteners/shorteners/base.py", line 32, in _post
    timeout=self.kwargs['timeout'])
  File "/home/jayu/.local/lib/python2.7/site-packages/requests/api.py", line 112, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/home/jayu/.local/lib/python2.7/site-packages/requests/api.py", line 58, in request
    return session.request(method=method, url=url, **kwargs)
  File "/home/jayu/.local/lib/python2.7/site-packages/requests/sessions.py", line 498, in request
    prep = self.prepare_request(req)
  File "/home/jayu/.local/lib/python2.7/site-packages/requests/sessions.py", line 441, in prepare_request
    hooks=merge_hooks(request.hooks, self.hooks),
  File "/home/jayu/.local/lib/python2.7/site-packages/requests/models.py", line 309, in prepare
    self.prepare_url(url, params)
  File "/home/jayu/.local/lib/python2.7/site-packages/requests/models.py", line 359, in prepare_url
    url = url.decode('utf8')
  File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x89 in position 51: invalid start byte

错误原因是什么? Python的版本是2.7.15rc1 每次我尝试运行python QRCODE.py时,回溯中的位置都为N。

有人可以纠正我吗?

1 个答案:

答案 0 :(得分:-2)

如果您在open(...)函数中遇到此问题,则需要在此函数中设置编码

fo = open(filename, something_else, encoding = 'UTF-8')

但是它仅在python 2中的python3中有效,您需要使用io.open:

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

去谷歌我不知道全部的sintax,但是我已经回答过了,在这里问:unable to decode this string using python