Есть hex-строка в БД. Необходимо расшифровать ее.
Строка большая, я прилагаю только часть ее "0x308218D806092A"
if __name__ == "__main__":
# sReverseHex = reverse_str(s[2:])
sByte = bytearray.fromhex(s[2:])
# print (chardet.detect(sByte))
sResult = sByte.decode("utf-16-be")
print(sResult)
код приводит к ошибке UnicodeDecodeError: 'utf16' codec can't decode bytes in position 1326-1327: illegal UTF-16 surrogate
Кодировки испробованы разные. chardet.detect(sByte) дал результат
{'confidence': 0.0, 'language': None, 'encoding': None}
Сергей Паньков, К сожалению, не могу целиком разместить строку (возможно через личные сообщения, но не на форуме). Если возможно, оценить в принципе корректность подхода, то прокомментируйте, пожалуйста. А подход мой прост: получить из шестнадцатеричного представления объект объект bytearray - bytearray.fromhex(s[2:]), а затем вернуть строку, декодированную из заданных байтов.
Xe1ga, Большое подозрение вызывает то, в каком формате и как именно вы получаете вашу 16-ричную строку.
Дали бы хотя бы раз в 20 побольше кусок и стало бы понятно ошибаетесь вы проводя неправильные аналогии, или у вас там действительно такая хрень откуда-то приходит.
Отформатируйте код в тексте вопроса. Писать неформатированный код - это невуажение к посетителям ресурса.
Подробнее опишите как получаете и чем формируется hex-строка.
Есть стандартный модуль bas64. В его составе есть функции b16encode и b16decode.
Это правильный способ закодировать и раскодировать строку в hex и обратно.
Если у вас это было сделано иначе, то нужно разбираться как было закодировано.
Поэтому я и спросил откуда берется строка и просил привести пример побольше, чем то, что вы написали.