Преобразование из шестнадцатеричной строки в Юникод
Вопрос
Как я могу преобразовать 'dead'
строка в строку Юникода u'\xde\xad'
?
Делая это:
from binascii import unhexlify
out = ''.join(x for x in [unhexlify('de'), unhexlify('ad')])
создает <type 'str'>
нить '\xde\xad'
Попытка использовать Unicode.join() следующим образом:
from binascii import unhexlify
out = ''.join(x for x in [u'', unhexlify('de'), unhexlify('ad')])
приводит к ошибке:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xde in position 0: ordinal not in range(128)
Решение
Unicode разработан для совместимости с Latin-1, вы можете использовать его и просто декодировать строку байтов:
In [2]: unhexlify('dead').decode('latin1')
Out[2]: u'\xde\xad'
Другие советы
Видеть это руководство по использованию Юникод Python, и используйте что-то вроде:
unicode('\x80abc', errors='replace')
или
unicode('\x80abc', errors='ignore')
Не связан с StackOverflow