框架:Django 2.0
语言:Python 3.6
我正在通过HTTP GET请求接收STX / ETX数据包。 当我解析查询字符串时(如下)
type=stxetx&packet=Sa%F8t%5B%06%01+%02%00%00%00%00%00%00%00%00%00l%00%B0%1C%8F%1EA%1B%00%00%02+%02%01S%00%00%00%00%00%00%00%0A%00%A8%02%FB%02%D56%00%00%03+%02%01%DC%00%00%00%00%00%00%00%0D%00t%03P%04%805%00%00&localpackettime=2018-08-16+03%3A10%3A11&serial=868324023356368&packettime=2018-08-16+03%3A10%3A11&receivetime=2018-08-16+03%3A10%3A12&timezone=UTC
使用urllib.parse.qs
或仅使用request.GET.get('packet')
我得到以下字符串:
ipdb> packet = 'Sa�t[\x06\x01 \x02\x00\x00\x00\x00\x00\x00\x00\x00\x00l\x00�\x1c�\x1eA\x1b\x00\x00\x02 \x02\x01S\x00\x00\x00\x00\x00\x00\x00\n\x00�\x02�\x02�6\x00\x00\x03 \x02\x01�\x00\x00\x00\x00\x00\x00\x00\r\x00t\
x03P\x04�5\x00\x00'
ipdb> type(packet)
<class 'str'>
ipdb> len(packet)
72
字符串的长度是我期望的长度(72),但是我需要解压缩数据,因为它是C结构,所以我可以使用值,但解压缩需要字节数组而不是字符串。但是,当我对字符串数组进行编码时,这会将长度增加到88,因此,如果它的长度与我期望的长度不同,我将不知道如何解压缩它。
ipdb> type(packet.encode())
<class 'bytes'>
ipdb> len(packet.encode())
88
我试图找出为什么字节数组的长度与unicode字符串的长度不同,这可能与编码有关,但是我尝试了几种编码,但它们没有什么区别。我不确定如何知道要选择哪种编码?
有人知道我下一步应该怎么做吗?