我知道这看起来非常简单,但问题在于我对所有这些字节-字符串-Unicode(以及编码-解码)的东西还没有清晰的理解。
我一直在尝试让我的代码在Python 3上运行。我卡住的部分是当我使用解析XML并解码其中包含的一个base64字符串时。
现在代码的运行方式如下:
我使用XPath查询'.../binary/text()'
检索二进制数据。这会产生一个包含一个对象的单元素列表。然后,在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会尝试编码字符串,而我不需要这样做。
通过Google进一步搜索,我找到了binascii
模块(如果我没记错的话,它间接地从base64
调用),但在我的字符串上调用binascii.b2a_base64()
会产生以下结果:
TypeError: 'str' does not support the buffer interface
顺便提一句,我甚至在如何在Python 3中解码十六进制字符串上找到了一个已回答的问题,但是这是使用专用方法bytes.fromhex()
完成的,所以我不知道它是否有帮助。
请问有人能告诉我我错过了什么吗?恐怕大部分帖子都与我的问题无关,只会让我更感到羞愧,但至少你们知道我尝试了什么。