2015-01-12 1 views
0

나는 이미지를 보낼 수있는 대화방에서 작업하고 있습니다. 그러나 이미지가 크기 때문에 부분적으로 보내고 각 부분을 문자열에 추가합니다. 내가 만들려고 할 때파이썬에서 문자열을 디코딩 할 때 base64 오류가 발생했습니다.

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) 

왜 내가이 오류를 얻고있다 : 그리고 그 안에있는 정보를 가지고있는 문자열을 디코딩하려고 할 때이 오류가 발생합니다 :

여기
return binascii.a2b_base64(s) 
Error: Incorrect padding 

내 코드입니다 영상? 어떻게 해결할 수 있습니까?

+0

@howaboutNO 오류를 무시하려고 시도하지 않고 오류를 방지하는 방법을 찾으려고합니다. 그리고 왜 그것이 저에게 오류를주고 있습니다. –

+0

해결책이있는 사람이 있습니까? –

+1

인코딩 된 문자가 4의 배수가 아닌 경우 Base64를 사용하려면 패딩이 필요합니다. –

답변

0

if data[-1] == ")":은 base64로 인코딩 된 문자열이 닫는 대괄호로 끝나는 것으로 보입니다.

이것은 아마도 문제의 원인 일 수 있습니다. imageBytes 데이터에는자를 필요가있는 후행 또는 선행 프로토콜 데이터가 있습니까?

희망이 도움이됩니다.

+0

예 문자열의 끝에 a)를 추가했습니다. 오류가 발생합니까? –

+0

예, 그렇게 생각합니다. If 메모리를 사용하면 공백을 base64 인코딩 된 데이터로 척할 수 있지만 그 밖의 경우는 거의 없습니다. 'imageBytes = imageBytes.rstrip (")")' – Joe

관련 문제