txt 文件作为反序列化 protobuff python 中的数据的输入,无法以正确的格式读取数据

问题描述

我想使用文本文件作为 protobuff 中 $userId = User::where('mf_branch_id',$permitbranchId)->firstOrFail(); $permit_report = WorkPermit::where('user_id',$userId->id)->get(); 函数的输入 存储在文本文件中的数据如下所示:

这是protobuff序列化数据

ParseFromString()

我希望数据采用这种格式作为反序列化数据的输入

0363D1015F5402656E0A140A0410021801120C120A303132333435363738390A0A0A0410071802120218020A120A04103A1819120A3A080A020001100220010A0A0A04103A1862120230000A140A0410081864120C420A082810591801204428448436B57E

但是当我将文本文件读取为二进制文件时,我正在获取这样的数据,因此无法反序列化 protobuff 中的数据

b'\x03h\xd1\x01dT\x02en\n\x19\n\x04\x10\x02\x18\x01\x12\x11\x12\x0f50D50U-843-01B1\n\n\n\x04\x10\x07\x18\x02\x12\x02\x18\x02\n\x12\n\x04\x10:\x18\x10\x12\n:\x08\n\x02\x00\x01\x10\x02 \x01\n\n\n\x04\x10;\x18(\x12\x020\x00\n\x14\n\x04\x10:\x18a\x12\x0cB\n\x08(\x10Y\x18\x01 D(Dj\xdec\xd6'

我正在使用 python 3 如何根据需要读取文本文件数据?

解决方法

试试下面的代码片段(在评论中解释):

xb = b'\xff\xfe0\x003\x006\x003\x00D\x001\x000\x001\x005\x00F\x005\x004\x000\x002\x006\x005\x006\x00E\x000\x00A\x001\x004\x000\x00A\x000\x004\x001\x000\x000\x002\x001\x008\x000\x001\x001\x002\x000\x00C\x001\x002\x000\x00A\x003\x000\x003\x001\x003\x002\x003\x003\x003\x004\x003\x005\x003\x006\x003\x007\x003\x008\x003\x009\x000\x00A\x000\x00A\x000\x00A\x000\x004\x001\x000\x000\x007\x001\x008\x000\x002\x001\x002\x000\x002\x001\x008\x000\x002\x000\x00A\x001\x002\x000\x00A\x000\x004\x001\x000\x003\x00A\x001\x008\x001\x009\x001\x002\x000\x00A\x003\x00A\x000\x008\x000\x00A\x000\x002\x000\x000\x000\x001\x001\x000\x000\x002\x002\x000\x000\x001\x000\x00A\x000\x00A\x000\x00A\x000\x004\x001\x000\x003\x00A\x001\x008\x006\x002\x001\x002\x000\x002\x003\x000\x000\x000\x000\x00A\x001\x004\x000\x00A\x000\x004\x001\x000\x000\x008\x001\x008\x006\x004\x001\x002\x000\x00C\x004\x002\x000\x00A\x000\x008\x002\x008\x001\x000\x005\x009\x001\x008\x000\x001\x002\x000\x004\x004\x002\x008\x004\x004\x008\x004\x003\x006\x00B\x005\x007\x00E\x00'
xs = xb.decode('utf-16') # \xff\xfe signature in xb => apply UTF-16
print('xs:',xs)
xx = bytes.fromhex(xs)   # all hexadecimal ciphers in xs
print('xx:',xx)

结果.\SO\65987622.py

xs: 0363D1015F5402656E0A140A0410021801120C120A303132333435363738390A0A0A0410071802120218020A120A04103A1819120A3A080A020001100220010A0A0A04103A1862120230000A140A0410081864120C420A082810591801204428448436B57E
xx: b'\x03c\xd1\x01_T\x02en\n\x14\n\x04\x10\x02\x18\x01\x12\x0c\x12\n0123456789\n\n\n\x04\x10\x07\x18\x02\x12\x02\x18\x02\n\x12\n\x04\x10:\x18\x19\x12\n:\x08\n\x02\x00\x01\x10\x02 \x01\n\n\n\x04\x10:\x18b\x12\x020\x00\n\x14\n\x04\x10\x08\x18d\x12\x0cB\n\x08(\x10Y\x18\x01 D(D\x846\xb5~'