在python 3中解码base64字符串(是否带有lxml)

我知道这看起来很尴尬,我想问题是我对所有这些字节-str-unicode(坦白地说,是编码-解码)东西还没有一个清晰的了解.

我一直在尝试让我的工作代码在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模块,但是它使用字节对象作为参数,并且我想不出将str表示为字节的方法,因为如果我尝试构造字节对象,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.

解决方法:

我没有安装Python 3,但听起来您需要将lxml返回的Unicode转换为字节,也许可以通过调用.encode(‘ascii’)来实现?

上一篇:更改lxml中etree.tostring的默认缩进


下一篇:python – 找到包含字符串的元素的xpath