В Python 3 все строки в юникоде. Обычно, если вы кодируете объект Unicode в строку, вы используете .encode('TEXT_ENCODING')
, поскольку hex
не является кодировкой текста, вы должны использовать codecs.encode()
для обработки произвольных кодеков. Например:
>>>> "hello".encode('hex')
LookupError: 'hex' is not a text encoding; use codecs.encode() to handle arbitrary codecs
>>>> import codecs
>>>> codecs.encode(b"hello", 'hex')
b'68656c6c6f'
Опять же, поскольку "привет" - это юникод, вам необходимо указать его как строку байтов перед кодированием в шестнадцатеричное. Это может более соответствовать вашему первоначальному подходу использования метода encode
.
Различия между binascii.hexlify
и codecs.encode
заключаются в следующем:
binascii.hexlify
Шестнадцатеричное представление двоичных данных.
Возвращаемое значение является байтовым объектом.
Тип: встроенная_функция_метод
codecs.encode
кодировать (объект, [кодирование [, ошибки]]) -> объект
Кодирует obj, используя кодек, зарегистрированный для кодирования. кодировка по умолчанию
в кодировку по умолчанию. ошибки могут быть даны, чтобы установить другую ошибку
Схема обработки. По умолчанию это «строгий», что означает, что ошибки кодирования повышаются
Ошибка ValueEr. Другими возможными значениями являются «игнорировать», «заменить» и
'xmlcharrefreplace', а также любое другое имя, зарегистрированное в
codecs.register_error, который может обрабатывать ValueErrors.
Тип: встроенный_функция_метод