2015-01-12 2 views
0

Я работаю в чате, где можно отправлять изображения. Но изображения большие, поэтому я отправляю их частично и добавляю каждую часть в строку. И когда я пытаюсь декодировать строку, которая имеет информацию, содержащуюся в нем я получаю эту ошибку:ошибка base64 при декодировании строки в python

return binascii.a2b_base64(s) 
Error: Incorrect padding 

Вот мой код:

def getData(self): 
    chatArea = self.chatArea 

    imageBytes = "" 
    imageMode = False 

    while 1: 
     data = self.s.recv(8000) 
     if not data: 
      break 

     if imageMode == True: 
      imageBytes = imageBytes + data 

      if data[-1] == ")": 
       newImage = open("Untitled.png", "wb") 
       newImage.write(imageBytes.decode("base64")) 
       newImage.close() 
       imageMode = False 
       print("Done") 
     else: 
      if re.findall(r'\[(.*?)\]', data) == ["Image"]: 
       print("Got the data") 
       imageMode = True 
      else: 
       string = data + "\n\n" 
       chatArea.configure(state=NORMAL) 
       chatArea.insert(END, string) 
       chatArea.configure(state=DISABLED) 

       newString = string.split(":")[0] 

       self.chatArea.see(END) 

     if newString == self.myName or newString == "Server": 
      pass 
     else: 
      winsound.PlaySound("Notify.wav", winsound.SND_FILENAME) 

Почему я получаю эту ошибку, когда я пытаюсь создать образ? Как я могу это исправить?

+0

@howaboutNO Я не пытаюсь игнорировать ошибку, я пытаюсь найти способ предотвратить ошибку. И почему это дает мне ошибку. –

+0

У кого-нибудь есть решение? –

+1

Base64 требует заполнения, когда закодированные символы не кратные 4. –

ответ

0

if data[-1] == ")":, похоже, ожидает, что закодированная строка base64 заканчивается закрывающей скобкой.

Возможно, это причина вашей проблемы. Имеются ли данные imageBytes для отслеживания или ведущих данных протокола, которые необходимо обрезать.

Надеюсь, это поможет.

+0

Да, я добавил a) в конец строки. Это вызовет ошибки? –

+0

Да, я так думаю, If память, вы можете вырезать белое пространство в кодированные base64 данные, но совсем немного. try_ imageBytes = imageBytes.rstrip (")") ' – Joe

Смежные вопросы