これは恥ずかしいほど簡単に見えますが、問題は、このbytes-str-unicode (およびencoding-decoding、率直に言って)のすべてをまだ明確に理解していないことだと思います。
私は自分の作業コードを Python 3 で実行しようとしています。私が立ち往生しているのは、XML を解析し、lxml
その XML にある base64 文字列をデコードするときです。
コードは次のように動作するようになりました。
XPath クエリを使用してバイナリ データを取得します'.../binary/text()'
。lxml.etree._ElementUnicodeResult
これにより、オブジェクトを含む 1 要素のリストが生成されます。次に、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
引数としてオブジェクトを取り、オブジェクトを構築しようとすると、Python は文字列をエンコードstr
しようとするため、として表示する方法を考えることができません。いらない。bytes
bytes
binascii
さらにグーグルで調べたところ、モジュールに出くわしました(base64
間違っていなければ、とにかく間接的に呼び出されます)がbinascii.b2a_base64()
、文字列を呼び出すと生成されます
TypeError: 'str' does not support the buffer interface
PS Python 3 で 16 進文字列をデコードする方法に関する回答済みの質問も見つけましたが、これは専用の方法で行われるbytes.fromhex()
ため、どのように役立つかわかりません。
誰かが私に欠けているものを教えてもらえますか? 残念ながら、投稿のほとんどは無関係であり、私の恥を悪化させるだけですが、少なくとも皆さんは私が試したことを知っています.