解码berkeley db字符串

问题描述 投票:1回答:1

解码berkeley db的数据时遇到麻烦。我已经用db4.8_dumpdb4.8_dump -p转储了数据,并使用python.decode()进行了解码

所以,这是十六进制编码中的db4.8_dump之后的数据看起来是什么样子

036b65794104053ca761cf8062cfff09a2ec355a2694da4eed0677b510cf0c43a0d8486694e9966f2133302c5aa51664e9003b04cfa3847ce20de92040844b9b05aa15b5ab58

以及与-p开关db4.8_dump -p相同的数据:

\03keyA\04\05<\a7a\cf\80b\cf\ff\09\a2\ec5Z&\94\daN\ed\06w\b5\10\cf\0cC\a0\d8Hf\94\e9\96o!30,Z\a5\16d\e9\00;\04\cf\a3\84|\e2\0d\e9 @\84K\9b\05\aa\15\b5\abX

我可以像他一样对它进行解码,但仍然不可读:

mbstr = b'036b65794104053ca761cf8062cfff09a2ec355a2694da4eed0677b510cf0c43a0d8486694e9966f2133302c5aa51664e9003b04cfa3847ce20de92040844b9b05aa15b5ab58'

mbstr.decode('hex')
'\x03keyA\x04\x05<\xa7a\xcf\x80b\xcf\xff\t\xa2\xec5Z&\x94\xdaN\xed\x06w\xb5\x10\xcf\x0cC\xa0\xd8Hf\x94\xe9\x96o!30,Z\xa5\x16d\xe9\x00;\x04\xcf\xa3\x84|\xe2\r\xe9 @\x84K\x9b\x05\xaa\x15\xb5\xabX'

根据文档https://docs.oracle.com/cd/E17275_01/html/programmer_reference/dumpload_format.html

如果反斜杠字符在任何其他字符之前,则后两个字符必须解释为单个字符的十六进制规范;例如,\ 0a是ASCII字符集中的换行符。但这对我不起作用。即>

>>> mbstr.decode('hex')
'\x03keyA\x04\x05<\xa7a\xcf\x80b\xcf\xff\t\xa2\xec5Z&\x94\xdaN\xed\x06w\xb5\x10\xcf\x0cC\xa0\xd8Hf\x94\xe9\x96o!30,Z\xa5\x16d\xe9\x00;\x04\xcf\xa3\x84|\xe2\r\xe9 @\x84K\x9b\x05\xaa\x15\xb5\xabX'
>>> mbstr.decode('hex').decode('ascii')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa7 in position 8: ordinal not in range(128)

如何将数据转换为可读的字符串格式?谢谢

解码伯克利数据库的数据时遇到麻烦。我已经使用db4.8_dump或db4.8_dump -p转储了数据,并使用python.decode()进行了解码,因此,这是db4.8_dump之后以十六进制编码显示的数据...

python hex ascii decode berkeley-db
1个回答
0
投票
Berkeley DB密钥和数据通常不是字符串。实际上,我不记得曾经使用字符串作为键的时候。数据,当然。有时。但是键比较功能对性能至关重要,它几乎总是可以用二进制表示键,就像它位于压缩的C结构中一样。
© www.soinside.com 2019 - 2024. All rights reserved.