Tôi biết điều này có vẻ xấu hổ dễ dàng, và tôi đoán vấn đề là tôi chỉ không có một sự hiểu biết rõ ràng về tất cả điều này byte-str-unicode (và giải mã mã hóa, nói thẳng thắn).Giải mã base64 chuỗi trong python 3 (với lxml hay không)
Tôi đã cố gắng lấy mã hoạt động của mình để chạy trên Python 3. Phần tôi đang mắc kẹt là khi tôi phân tích cú pháp XML bằng lxml
và giải mã chuỗi base64 trong XML đó.
Mã này hiện đang làm việc trong các cách sau đây:
tôi lấy dữ liệu nhị phân với một truy vấn XPath '.../binary/text()'
. Điều này tạo ra một danh sách một phần tử có chứa một đối tượng lxml.etree._ElementUnicodeResult
. Sau đó, với python 2, tôi đã có thể làm:
decoded = source.decode('base64')
và cuối cùng
output = numpy.frombuffer(decoded)
Tuy nhiên, trên python 3 tôi nhận được một thông báo lỗi nói
AttributeError: 'lxml.etree._ElementUnicodeResult' object has no attribute 'decode'
này không phải là quá đáng ngạc nhiên, bởi vì lxml.etree._ElementUnicodeResult
là một phân lớp của str
.
Một cách khác là để có được một thực str
với cùng một dữ liệu trong nó với
binary = tree.xpath('//binary')[0]
binary_string = binary.text
Đó sẽ là về cơ bản giống nhau. Vì vậy, tôi phải làm gì để giải mã nó từ base64? Tôi đã xem xét các mô-đun base64
, nhưng phải mất một đối tượng bytes
làm đối số và tôi không thể nghĩ ra cách để trình bày str
là bytes
, bởi vì nếu tôi cố gắng xây dựng một đối tượng bytes
, Python sẽ cố gắng mã hóa chuỗi mà tôi không cần.
Googling hơn nữa, tôi đi qua các mô-đun binascii
(được gọi gián tiếp từ base64
dù sao, nếu tôi không nhầm), nhưng gọi binascii.b2a_base64()
trên chuỗi của tôi sản xuất
TypeError: 'str' does not support the buffer interface
T.B. Tôi thậm chí đã tìm thấy một câu hỏi được trả lời trên how to decode a hex string in Python 3, nhưng điều này được thực hiện với một phương pháp chuyên dụng bytes.fromhex()
vì vậy tôi không thấy nó sẽ hữu ích như thế nào.
Có thể ai đó vui lòng cho tôi biết tôi đang thiếu gì không? Tôi sợ hầu hết các bài viết là không liên quan và chỉ làm trầm trọng thêm sự xấu hổ của tôi, nhưng ít nhất các bạn biết what I tried.
Ngoài ra, Ned Batchelder có một bản trình bày tuyệt vời về công cụ byte-str-unicode này: [Pragmatic Unicode, hoặc: Làm thế nào để tôi dừng đau?] (Http://nedbatchelder.com/text/unipain.html) – delnan
Cảm ơn @delnan, tôi đang nửa chừng và thực sự đã giúp rất nhiều :) –