UnicodeDecodeError: кодек «utf-8» не может декодировать байт 0x80 в позиции 0: недопустимый начальный байт - PullRequest
0 голосов
/ 02 октября 2018

Я сохраняю список, используя pickle.dumps() следующим образом:

my_list = ['Hello', 'I', 'Have', 'a', 'question', 'camión']
my_pickle = pickle.dumps(my_list)       

После создания маринада я загружаю его в контейнер в пакете Azure:

blob_service.block_service.create_blob_from_bytes('containername', 'filename', my_pickle)

И получаю обратно:

my_bytes = blob_service.block_service.get_blob_to_bytes('containername', 'filename')

То, что я хочу (my_list), находится внутри my_bytes.content, и, если я напечатал, я получаю:

b'\x80\x03]q\x00(X\x05\x00\x00\x00Helloq\x01X\x01\x00\x00\x00Iq\x02X\x04\x00\x00\x00Haveq\x03X\x01\x00\x00\x00aq\x04X\x08\x00\x00\x00questionq\x05X\x07\x00\x00\x00cami\xc3\xb3nq\x06e.'

Чтобы вернуть my_bytes обратно в список, я попытался расшифровать его следующим образом:

my_bytes.decode('utf-8')

Но я получаю следующую ошибку:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

Другое кодирование, например latin-1, это не дает ошибки, но возвращает

'\x80\x03]q\x00(X\x05\x00\x00\x00Helloq\x01X\x01\x00\x00\x00Iq\x02X\x04\x00\x00\x00Haveq\x03X\x01\x00\x00\x00aq\x04X\x08\x00\x00\x00questionq\x05X\x07\x00\x00\x00camiónq\x06e.'

вместо my_list.

Я искал в Интернете, чтобы выяснить, почему это происходитно я не смог найти ничего, что помогло бы мне, поэтому любое предложение или совет более чем приветствуютсяЯ хотел бы получить my_list от my_bytes.Обратите внимание, что мне интересно, как декодировать my_bytes.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

В конце концов я преобразовал свой список в строку как:

my_list=str(my_list)

и загрузил его в хранилище BLOB-объектов как:

BlockStorage('<account_name>', '<account_key>').block_service.create_blob_from_text('<container_name>', '<file_name>', my_list)

И, наконец, загрузил его:

my_file_as_str = BlockStorage('<account_name>', '<account_key>').block_service.get_blob_to_text('<container_name>', '<file_name>')

Чтобы вернуть мой список, мне просто нужно было сделать сейчас:

my_list = eval(my_file_as_str.content)
0 голосов
/ 02 октября 2018

Используйте pickle.loads для реверса pickle.dumps:

>>> s = b'\x80\x03]q\x00(X\x05\x00\x00\x00Helloq\x01X\x01\x00\x00\x00Iq\x02X\x04\x00\x00\x00Haveq\x03X\x01\x00\x00\x00aq\x04X\x08\x00\x00\x00questionq\x05X\x07\x00\x00\x00cami\xc3\xb3nq\x06e.'
>>> import pickle
>>> pickle.loads(s)
['Hello', 'I', 'Have', 'a', 'question', 'camión']
...