我知道这看起来令人尴尬的容易,我想这个问题是我根本没有这一切字节-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