我知道这看起来很尴尬,我想问题是我对所有这些字节-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’)来实现?