UnicodeDecodeError:"utf-8"编解码器无法解码位置 0 中的字节0x80:无效



我正在使用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'x80x03]qx00(Xx05x00x00x00Helloqx01Xx01x00x00x00Iqx02Xx04x00x00x00Haveqx03Xx01x00x00x00aqx04Xx08x00x00x00questionqx05Xx07x00x00x00camixc3xb3nqx06e.'

为了让my_bytes回到列表中,我尝试按如下方式对其进行解码:

my_bytes.decode('utf-8')

但是我收到以下错误:

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

其他编码,如latin-1,它没有给出错误,但它正在返回

'x80x03]qx00(Xx05x00x00x00Helloqx01Xx01x00x00x00Iqx02Xx04x00x00x00Haveqx03Xx01x00x00x00aqx04Xx08x00x00x00questionqx05Xx07x00x00x00camiónqx06e.'

而不是my_list.

我已经在互联网上搜索了为什么会发生这种情况,但我找不到任何对我有帮助的东西,所以任何建议或建议都非常受欢迎。我想从my_bytes那里得到my_list.请注意,我对如何解码my_bytes感兴趣。

使用pickle.loads反转pickle.dumps

>>> s = b'x80x03]qx00(Xx05x00x00x00Helloqx01Xx01x00x00x00Iqx02Xx04x00x00x00Haveqx03Xx01x00x00x00aqx04Xx08x00x00x00questionqx05Xx07x00x00x00camixc3xb3nqx06e.'
>>> 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)

最新更新