我知道这看起来非常容易,我想问题是我还没有清楚地了解所有这些bytes-str-unicode(和encoding-decoding,坦率地说)的东西。
我一直在尝试让我的工作代码在 Python 3 上运行。我坚持的部分是当我解析 XMLlxml
并解码该 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
PS我什至找到了一个关于如何在 Python 3 中解码十六进制字符串的已回答问题,但这是通过专用方法完成的,bytes.fromhex()
所以我看不出它会有什么帮助。
有人可以告诉我我错过了什么吗?恐怕大部分帖子都无关紧要,只会加剧我的耻辱,但至少你们知道我尝试了什么。