python压缩数据长度_Python错误:解压缩需要一个长度为4的字符串参数,但这是吗?...

本文探讨了在Python中使用struct.unpack解压Unicode字符串时遇到的问题,并提供了解决方案。作者试图从URL中提取数据,但在处理过程中遇到了TypeError。解决方法是确保只对二进制数据而非Unicode文本使用unpack。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在使用python 2.7。我不明白为什么这行不通,有人可以给我提示。

>>> from struct import unpack

>>> T2 = u'\xb6'+u'\x01'+u'\x59'+u'\x59'

>>> T2

u'\xb6\x01YY'

>>> unpack('i', TS)

Traceback (most recent call last):

File "", line 1, in

struct.error: unpack requires a string argument of length 4

我以为我要输入4的字符串参数?

我使用unicode的原因是我正在尝试从发送的该URL中提取数据:

path="/write/?type=stxetx&packet=AX%05YX%01%00%00%00%00%00%00%02%00%A0%00%05%00%C8%00%C0%0D%28%28%00%00%E85&localpackettime=2016-12-20+09%3A18%3A57&serial=868324023356343&packettime=2016-12-20+09%3A18%3A57&receivetime=2016-12-20+09%3A18%3A58&timezone=UTC"

这是我用来获取数据包数据的代码:

packet_data = request.GET.getlist('packet')

data_list = list(packet_data[0])

print "Data list ",data_list

这给了我一个unicode列表,如下所示:

>> Data list [u'A', u'v', u'\x05', u'Y', u'X', u'\x01', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x02', u'\x00', u'\xa0', u'\x00', u'\x05', u'\x00', u'\xc8', u'\x00', u'\xc0', u'\r', u'(', u'(', u'\x00', u'\x00', u'\xe8', u'5']

data_list[1:5]组成一个4字节的int时间戳,唯一的办法是一次解压缩值,但是会引发此错误。

解压缩之前是否应该对unicode进行解码/编码?

解决方案

您无法解压缩Unicode文本。您将解压缩二进制数据。该错误表明您传递了错误的对象类型。如果传入空的Unicode字符串,则会出现相同的错误:

>>> struct.unpack('i', u'')

Traceback (most recent call last):

File "", line 1, in

struct.error: unpack requires a string argument of length 4

不要使用Unicode:

>>> struct.unpack('i', '\xb6\x01YY')

(1499005366,)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值