Я работаю над проектом python в версии 2.6, который также поддерживает будущую поддержку python 3. В частности, я работаю над алгоритмом digest-md5.Python: объединение байтов со строкой
В Python 2.6, не запуская этот импорт:
from __future__ import unicode_literals
Я могу написать кусок кода, как это:
a1 = hashlib.md5("%s:%s:%s" % (self.username, self.domain, self.password)).digest()
a1 = "%s:%s:%s" %(a1, challenge["nonce"], cnonce)
без каких-либо проблем, моя аутентификация работает отлично. Когда я пытаюсь ту же строку кода с unicode_literals импортировала я получаю исключение:
UnicodeDecodeError: «utf8» кодек не может декодировать байт 0xa8 в положении 0: неожиданный байт-код
Теперь я относительно новый на python, поэтому я немного застрял в этом. если я заменю% s в строке форматирования как% r, я могу конкатенировать строку, но аутентификация не работает. Спецификация digest-md5, которую я прочитал, говорит, что 16-разрядный двоичный дайджест должен быть добавлен к этим другим строкам.
Любые мысли?
Python 3.x четко отделяет строки от байт-массивов. В зависимости от ваших потребностей он * может * работать над добавлением шаблонов ''% s:% s:% s "' с 'b' для получения байтового массива, но это может привести к неправильным результатам. Какова цель этого кода? – Philipp
Это фрагмент большого фрагмента кода, который используется для алгоритма digest-md5, который я использую для аутентификации на сервере xmpp, и это конкретный фрагмент кода, вызывающий некоторые проблемы. Предваряющая форматирование строки с b по-прежнему вызывает ту же проблему. Вот еще информация о создании digest-md5 http://web.archive.org/web/20050224191820/http://cataclysm.cx/wip/digest-md5-crash.html – Macdiesel