Tôi đang làm việc trên một dự án python trong 2.6 cũng có hỗ trợ trong tương lai cho python 3 đang làm việc. Cụ thể là tôi đang làm việc trên một thuật toán digest-md5.Python: ghép nối các byte với một chuỗi
Trong python 2,6 mà không cần chạy nhập khẩu này:
from __future__ import unicode_literals
tôi có thể viết một đoạn mã như thế này:
a1 = hashlib.md5("%s:%s:%s" % (self.username, self.domain, self.password)).digest()
a1 = "%s:%s:%s" %(a1, challenge["nonce"], cnonce)
Nếu không có bất kỳ vấn đề, xác thực của tôi hoạt động tốt. Khi tôi cố gắng cùng một dòng mã với unicode_literals import tôi nhận được một ngoại lệ:
UnicodeDecodeError: 'utf8' giải mã không thể giải mã byte 0xa8 ở vị trí 0: bất ngờ mã byte
Bây giờ tôi là tương đối mới để python vì vậy tôi là một chút khó khăn trong việc tìm ra điều này. nếu tôi thay thế% s trong chuỗi định dạng là% r Tôi có thể ghép chuỗi, nhưng xác thực không hoạt động. Thông số digest-md5 mà tôi đã đọc nói rằng thông số phân giải nhị phân 16 octet phải được nối thêm vào các chuỗi khác.
Mọi suy nghĩ?
Python 3.x tách rõ ràng chuỗi khỏi mảng byte. Tùy thuộc vào nhu cầu của bạn, nó * có thể * làm việc để thêm vào các mẫu '"% s:% s:% s "' với 'b' để lấy một mảng byte, nhưng điều đó cũng có thể cho kết quả sai. Mục đích của mã này là gì? – Philipp
Đây là đoạn trích của một đoạn mã lớn hơn được sử dụng cho thuật toán digest-md5 mà tôi đang sử dụng để xác thực đối với máy chủ xmpp và đây là đoạn mã cụ thể đang gây ra cho tôi một số vấn đề. Trước khi chờ chuỗi định dạng bằng b vẫn gây ra cùng một vấn đề. Dưới đây là một số thông tin khác về cách tạo một digest-md5 http://web.archive.org/web/20050224191820/http://cataclysm.cx/wip/digest-md5-crash.html – Macdiesel