2014-11-26 8 views
5
im = Image.open(filePath)      # load image 
self.msg = str(bytearray(list(im.getdata()))) # convert image data to string 
encodedMsg = base64.b64encode(self.msg) 

kiedy starałem się kodować dane odczytane z obrazu do base64, zwraca błąd:gdy konwersja do oparcia 64, TypeError: „str” nie obsługuje interfejsu bufora

File "Steganography.py", line 42, in msgToXml 
    encodedMsg = base64.b64encode(self.msg) 
    File "/opt/python3/current/lib/python3.4/base64.py", line 62, in b64encode 
    encoded = binascii.b2a_base64(s)[:-1] 
TypeError: 'str' does not support the buffer interface 

Działa, gdy jestem w domu przy użyciu Ubuntu (python 2.7). Ale pokazuje błąd, gdy używam szkolnego komputera (python3.4). Jak mogę to rozwiązać?

Odpowiedz

0

W skrócie, to dlatego, że w Python3 nastąpił gruntowny przegląd Unicode/ciąg/system bajtów. Powinieneś przeczytać to https://docs.python.org/3.0/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit i https://docs.python.org/3.3/howto/unicode.html, aby zrozumieć, co się stało i jak sobie z tym poradzić.

Aby odpowiedzieć na konkretny problem - jeśli nie przekonwertujesz swojego bytearray na str, wszystko powinno działać.

+0

Czytam niektóre dane z pliku xml. Ten kod 'self.msg = base64.b64decode (self.xml.encode ('utf-8'))' zwraca 'Plik" /opt/python3/current/lib/python3.4/base64.py ", wiersz 90, w b64decode return binascii.a2b_base64 (s) binascii.Error: Incorrect padding' – BadEggX