Как преобразовать мой bytearray('b\x9e\x18K\x9a') во что-то вроде этого --> '\x9e\x18K\x9a'‹ --- просто str , а не массив

Как преобразовать мой bytearray('b\x9e\x18K\x9a') во что-то вроде этого --> \x9e\x18K\x9a ‹---просто str, а не массив!

>> uidar = bytearray()
>> uidar.append(tag.nti.nai.uid[0])
>> uidar.append(tag.nti.nai.uid[1])
>> uidar.append(tag.nti.nai.uid[2])
>> uidar.append(tag.nti.nai.uid[3])
>> uidar
   bytearray('b\x9e\x18K\x9a')

Я пытаюсь декодировать свой байтовый массив с помощью

uid  =  uidar.decode('utf-8')

но не может...

Traceback (most recent call last):
  File "<pyshell#42>", line 1, in <module>
    uid = uidar.decode("utf-8")
  File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x9e in position 0: invalid start byte

Помоги мне, пожалуйста ...


person user1376294    schedule 05.05.2012    source источник
comment
То, о чем вы просите, кажется, не имеет никакого смысла. Не могли бы вы расширить и уточнить свой вопрос, сказав, чего вы пытаетесь достичь в целом?   -  person Francis Avila    schedule 05.05.2012
comment
Добро пожаловать в СО! Если вы удовлетворены ответом, не забудьте отметить его как принятый, нажав на значок галочки рядом с вопросом.   -  person jterrace    schedule 05.05.2012


Ответы (1)


В версии 2.x строки являются байтовыми строками.

>>> str(bytearray('b\x9e\x18K\x9a'))
'b\x9e\x18K\x9a'

Latin-1 сопоставляет первые 256 символов с их эквивалентами байтового значения, поэтому в Python 3.x:

3>> bytearray(b'b\x9e\x18K\x9a').decode('latin-1')
'b\x9e\x18K\x9a'
person Ignacio Vazquez-Abrams    schedule 05.05.2012