UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte
我正在使用 pickle.dumps()
保存列表:
my_list = ['Hello', 'I', 'Have', 'a', 'question', 'camión']
my_pickle = pickle.dumps(my_list)
创建 pickle 后,我将其上传到 Azure Batch 中的容器:
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
。
我在 Internet 上搜索以找出发生这种情况的原因,但找不到任何对我有帮助的信息,因此非常欢迎任何建议或建议。我想从 my_bytes
得到 my_list
。请注意,我对如何解码 my_bytes
.
很感兴趣
使用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']
我最后做的是将我的列表转换为字符串:
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)
我正在使用 pickle.dumps()
保存列表:
my_list = ['Hello', 'I', 'Have', 'a', 'question', 'camión']
my_pickle = pickle.dumps(my_list)
创建 pickle 后,我将其上传到 Azure Batch 中的容器:
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
。
我在 Internet 上搜索以找出发生这种情况的原因,但找不到任何对我有帮助的信息,因此非常欢迎任何建议或建议。我想从 my_bytes
得到 my_list
。请注意,我对如何解码 my_bytes
.
使用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']
我最后做的是将我的列表转换为字符串:
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)