Подтвердить что ты не робот

Декодирование шестнадцатеричной строки в Python 3

В Python 2 преобразование шестнадцатеричной формы строки в соответствующий юникод было простым:

comments.decode("hex")

где переменная 'comments' является частью строки в файле (остальная часть строки не нуждается в преобразовании, поскольку она представлена ​​только в ASCII.

Теперь в Python 3 это не работает (я предполагаю, что из-за переключения между байтами/строкой и строкой/юникодом. Я чувствую, что в Python 3 должен быть однострочный, чтобы делать то же самое, вместо того, чтобы читать всю строку в виде ряда байтов (что я не хочу делать), а затем преобразовывать каждую часть строки отдельно. Если это возможно, я бы хотел прочитать всю строку как строку юникода (потому что остальная часть строки находится в юникоде) и только преобразовать эту часть из шестнадцатеричного представления.

4b9b3361

Ответ 1

Что-то вроде:

>>> bytes.fromhex('4a4b4c').decode('utf-8')
'JKL'

Просто введите фактическую кодировку, которую вы используете.

Ответ 2

import codecs

decode_hex = codecs.getdecoder("hex_codec")

# for an array
msgs = [decode_hex(msg)[0] for msg in msgs]

# for a string
string = decode_hex(string)[0]