Каков наилучший способ сравнить строковый объект с объектом байтов, который работает как на Python 2, так и на Python 3? Предположим, что оба: utf8
. В более общем плане, как написать сопоставление Python 2 и Python 3 двух объектов, каждый из которых может быть строкой, байтами или unicode-объектом?Сравнение строки с байтами, которая работает как в Python 2, так и в 3
Проблема заключается в том, что "asdf" == b"asdf"
истинна в Python 2 и Ложные в Python 3
Между тем, нельзя слепо кодировать или объекты декодирования, поскольку строки в Python 2 имеют как encode
и decode
методы, но строки в Python 3 просто используйте методы кодирования.
Наконец, isinstance(obj, bytes)
возвращает Справедливо для любого не-юникод строки в Python 2 и возвращает Правда только для байтов объектов в Python 3.
Почему вы сравнивая их в первую очередь? –
@ IgnacioVazquez-Abrams Это не относится к вопросу. Ситуация, в которой я сталкиваюсь, заключается в сравнении вывода библиотеки цифровой подписи с ключом в веб-запросе; один - это строка, а другая - байтовая строка. Однако этот вопрос был попыткой охватить более общую ситуацию, поскольку я не нашел в этом никаких материалов. – Zags
Но это не очень полезно в общей ситуации. Обычно вы должны декодировать байты до текста, прежде чем сравнивать их. –