我知道這看起來令人尷尬的容易,我想這個問題是我根本沒有這一切字節-STR-unicode的清醒的認識(和編碼解碼,坦率地說)的東西呢。解碼的base64字符串在Python 3(與LXML與否)
我一直試圖讓我的工作代碼在Python 3上運行。我堅持使用的部分是當我用lxml
解析XML並解碼該XML中的base64字符串時。
代碼現在工作以下列方式:
我用XPath查詢'.../binary/text()'
檢索二進制數據。這會生成一個包含lxml.etree._ElementUnicodeResult
對象的單元素列表。然後,與Python 2,我是能夠做到:
decoded = source.decode('base64')
最後
output = numpy.frombuffer(decoded)
然而,在Python 3中,我得到一個錯誤信息說
AttributeError: 'lxml.etree._ElementUnicodeResult' object has no attribute 'decode'
事實並非如此令人驚訝,因爲lxml.etree._ElementUnicodeResult
是str
的子類。
另一種方法是,以獲得真正的str
與它相同的數據與
binary = tree.xpath('//binary')[0]
binary_string = binary.text
這將是基本相同的。那麼我該怎麼做從base64解碼它呢?我已經看了base64
模塊,但它需要一個bytes
對象作爲參數,我想不出將str
作爲bytes
的方式,因爲如果我嘗試構造一個bytes
對象,Python將嘗試編碼字符串,我不需要。
進一步谷歌搜索,我整個binascii
模塊來(這是從base64
間接調用,無論如何,如果我沒有記錯的話),但我的字符串調用binascii.b2a_base64()
產生
TypeError: 'str' does not support the buffer interface
附:我甚至在how to decode a hex string in Python 3上找到了一個回答問題,但是這是通過專門的方法bytes.fromhex()
完成的,所以我不認爲它會有幫助。
可能有人請告訴我,我缺少的是什麼?恐怕大部分帖子都是無關緊要的,只會加重我的恥辱,但至少你們知道what I tried。
順便說一句,Ned Batchelder在這個bytes-str-unicode的東西上有一個很棒的介紹:[Pragmatic Unicode,或者:如何阻止疼痛?](http:/ /nedbatchelder.com/text/unipain.html) – delnan 2012-04-04 21:11:08
謝謝@delnan,我到一半,真正幫助了很多已經:) – 2012-04-04 21:51:10