Python 使用未知编码对字符串形式的字节进行解码

Python 使用未知编码对字符串形式的字节进行解码,python,Python,所以我开始了我自己的小项目,为游戏创建一个机器人, 但之前很少编码,所以我绝对不是专家,如果我搞混了什么或者忘记提到一些信息,我会提前道歉 因此,基本上我的python机器人将连接到服务器(WebSocket connection 13,标题是“接受编码:gzip,deflate,br”),我使用WebSocket模块,这很好。游戏以JSON格式发送消息。然而,它们充满了反斜杠,我认为javascript会在内部清除这些反斜杠,将每条消息拆分为多条消息,并删除最外层。到目前为止,我的解决方案是清

所以我开始了我自己的小项目,为游戏创建一个机器人, 但之前很少编码,所以我绝对不是专家,如果我搞混了什么或者忘记提到一些信息,我会提前道歉

因此,基本上我的python机器人将连接到服务器(WebSocket connection 13,标题是“接受编码:gzip,deflate,br”),我使用WebSocket模块,这很好。游戏以JSON格式发送消息。然而,它们充满了反斜杠,我认为javascript会在内部清除这些反斜杠,将每条消息拆分为多条消息,并删除最外层。到目前为止,我的解决方案是清除反斜杠,从那里开始,它非常简单

问题是:地图数据显然是经过编码的。因此,基本上信息如下所示:

{"type":"pkg","data":"[\"{\\\"type\\\":\\\"pl\\\",\\\"data\\\":[\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"p\\\\\\\",\\\\\\\"id\\\\\\\":227727,\\\\\\\"tpl\\\\\\\":227727,\\\\\\\"s\\\\\\\":458
\\\\\\\"map\\\\\\\",\\\\\\\"xî\u0080\u0086182î\u0080\u008dyî\u0080\u0086478î\u0080\u008dtilesî\u0080\u0086\\\\\\\"1:î\u0080¢î\u0080¤î\u0080£î\u0080¦526_21î\u0080¢254:36î\u0080²î\u0080´î\u0080³î\u0080µ:î\u0080¬î\u0080¸î\u0080ºî\u0080·î\u0080·î\u0080ºî\u0080¼î\u0080¶
。。。。然后在消息的末尾(要长得多,我只是不想发布30行压缩数据):

这显然是编码/压缩的地图数据。firefox dev tools显示它也已解压缩,然后看起来更像这样:

{"type":"pkg","data":"[\"{\\\"type\\\":\\\"pl\\\",\\\"data\\\":[\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"p\\\\\\\",\\\\\\\"id\\\\\\\":227727,\\\\\\\"tpl\\\\\\\":227727,\\\\\\\"s\\\\\\\":458
\\\\\\\"map\\\\\\\",\\\\\\\"xî\u0080\u0086182î\u0080\u008dyî\u0080\u0086478î\u0080\u008dtilesî\u0080\u0086\\\\\\\"1:î\u0080¢î\u0080¤î\u0080£î\u0080¦526_21î\u0080¢254:36î\u0080²î\u0080´î\u0080³î\u0080µ:î\u0080¬î\u0080¸î\u0080ºî\u0080·î\u0080·î\u0080ºî\u0080¼î\u0080¶
我试过使用不同的命令和模块,比如
zlib
,但老实说,我真的迷路了。数据已经解码,现在是字节形式的,还是压缩的zip数据?如果是这样,我如何解码它,因为我现在将它作为原始字符串处理?或者我应该从一开始就把它放到一个数据文件中?席,一开始,代表编码方案?


非常感谢您的帮助,我真的很想知道这里到底发生了什么:很难给出一个明确的答案。你知道这些地图数据应该代表什么吗?什么时候变?基本上,您要做的是对这个协议进行反向工程。它可能不是“编码的”,只是可能不是字符串。他们可能将这些字符用作字节值。无论哪种方式,这些\u部分都可能是unicode字符。看起来他们只是将字节流转储到字段中,并将其编码为unicode。我要做的是尝试将其解码为unicode字符串,然后将其视为字节流。谢谢您的回答!所以游戏是2d-u只能直线移动,而不是对角线,简单的x-y坐标。新的地图信息只会在地图上有一个对象时弹出,如果你在草地上跑步,什么也不会发生。一般来说,我会假设输出类似于x:51,y:126,obj:xxx,对象列表甚至在第一个初始消息中,包括信息,如果它是可破坏的/可行走的。足够公平了。看,你现在只能说“在半随机时间,我得到随机字节”。除非你从现在开始采取具体措施,否则无法知道你的猜测是否属实。一些想法:-检查是否有其他人为您接收的数据解析\编写了代码-向客户伪造数据(说起来容易做起来难)。你的客户对虚假数据有何反应-将客户机加载到IDA中并享受乐趣(组装很少有乐趣)从outter的角度来看,数据看起来像是过度编码的JSON,其中较低的层又是JSON编码的字符串。这将是相当痛苦的解码层对层。您发布的最后一块数据看起来像UTF-16或类似的编码。长话短说:编码数据的人对JSON没有任何经验。