[英]Python error: unpack requires a string argument of length 4, but it is?
我正在使用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 "<stdin>", line 1, in <module>
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 "<stdin>", line 1, in <module>
struct.error: unpack requires a string argument of length 4
不要使用Unicode:
>>> struct.unpack('i', '\xb6\x01YY')
(1499005366,)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.