解码berkeley db的数据时遇到麻烦。我已经用db4.8_dump
或db4.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之后以十六进制编码显示的数据...