我的系统是fedora。由于某种原因。一条记录的最后一个字段是一个 unicode 字符串 (在 qemu 中使用来自来宾机器的 memcpy 复制数据)。unicode 字符串是 windows regedit 键名。
smss.exe|NtOpenKey|304|4|4|0|\^@R^@e^@g^@i^@s^@t^@r^@y^@\^@M^@a^@ c^@h^@i^@n^@e^@\^@S^@y^@s^@t^@e^@m^@\^@C^@u^@r^@r^ @e^@n^@t^@C^@o^@n^@t^@r^@o^@l^@S^@e^@t^@\^@C^@o^@n ^@t^@r^@o^@l^@\^@S^@e^@s^@s^@i^@o^@n^@ ^@M^@a^@n^@a ^@g^@e^@r^@ smss.exe|NtClose|304|4|4|0|System|NtOpenKey|4|0|2147484532|0|\^@R^@e^@g^@i ^@s^@t^@r^@y^@\^@M^@a^@c^@h^@i^@n^@e^@\^@S^@y^@s^@ t^@e^@m^@\^@C^@u^@r^@r^@e^@n^@t^@C^@o^@n^@t^@r^@o^ @l^@S^@e^@t^@ services.exe|NtOpenKey|680|624|636|0|\^@R^@E^@G^@I^@S^@T^@R^ @Y^@\^@M^@A^@C^@H^@I^@N^@E^@\^@S^@y^@s^@t^@e^@m^@\ ^@C^@u^@r^@r^@e^@n^@t^@C^@o^@n^@t^@r^@o^@l^@S^@e^@ t^@\^@S^@e^@r^@v^@i^@c^@e^@s^@
这是一些十六进制代码:使用'|' 作为拆分字符。前 6 个字段是 ascii sting 。最后一个字段是一个窗口 unicode 字符串(我认为它是 utf-16 代码)。
0000000 6d73 7373 652e 6578 4e7c 4f74 6570 4b6e
0000010 7965 337C 3430 347C 347C 307C 5c7c 5200
0000020 6500 6700 6900 7300 7400 7200 7900 5C00
0000030 4d00 6100 6300 6800 6900 6e00 6500 5C00
0000040 5300 7900 7300 7400 6500 6d00 5C00 4300
0000050 7500 7200 7200 6500 6E0000 7400 4200
6F00 7400 7400,600,00070700 6F00
6C00 6C00
6C00 7300 6F00 7300 6F00 7300 6F00 6F00 6900 6F00 6F00 6_00
0000090 2000 4d00 6100 6e00 6100 6700 6500 7200
我将使用 python 解析它并将其插入一个 db 。这是我的处理方式
def parsecreate(filename):
sourcefile = codecs.open("data.db",mode="r",encoding='utf-8')
cx = sqlite3.connect("sqlite.db")
cu = cx.cursor()
cu.execute("create table data(id integer primary key,command text, ntfunc text, pid text, ppid text, handle text, roothandle text, genevalue text)")
eachline = []
for lines in sourcefile:
eachline = lines.split('|')
eachline[-1] = eachline[-1].strip('\n')
eachline[-1] = eachline[-1].decode('utf-8')
cu.execute("insert into data(command,ntfunc,pid,ppid,handle,roothandle,genevalue) values(?,?,?,?,?,?,?)",(eachline[0],eachline[1],eachline[2],eachline[3],eachline[4],eachline[5],eachline[-1]) )
cx.commit()
cx.close()
我会错的:
文件“./parse1.py”,第 18 行,在 parsecreate 中为源文件中的行:文件“/usr/lib/python2.7/codecs.py”,第 684 行,在下一个 return self.reader.next() 文件中“ /usr/lib/python2.7/codecs.py”,第 615 行,在下一行 = self.readline() 文件“/usr/lib/python2.7/codecs.py”,第 530 行,在 readline 数据 = self .read(readsize, firstline=True) File "/usr/lib/python2.7/codecs.py", line 477, in read newchars, decodedbytes = self.decode(data, self.errors) UnicodeDecodeError: 'utf8' codec无法解码位置 51 中的字节0xd0 :无效的继续字节
因为 unicode 字符串可能包含 utf8 不知道的字节。如何正确阅读最后一个字段?
简单的说。不是 utf-16 编码文件中有一个 unicode 字符串,如何使该字段正确插入到数据库中?Python 读取文件使用一种编码方式。我可以只读取原始字节吗?可以将这些字节组合成一个 unicode 字符串。