Чтение файлов BerkleyDB из python: `\ x01 \ x0b \ x88 \ x0c \ x01`? - PullRequest
1 голос
/ 10 апреля 2011

Этот вопрос в двух словах: что означают \x04++HLMh7EjP3ILSfF\x00 и

'\x01\x0b\x88\x0c\x01-\x10\x02\x06!\x05"\x05#\n$\x0c\'\x0e%\x0b\x01&\x02\'\x06(\n\x00\x00'

означает?

Привет всем,

Я пытаюсь прочитать файлы базы данных Palm pre 2. Некоторая информация доступна в документации , но мне недостаточно для четкого понимания формата.

Используя команду file, я узнал, что формат был objects.db: Berkeley DB (Btree, version 9, native byte-order).

Попытка открыть базу данных напрямую с помощью bsddb.open() не сработала; Я должен был использовать

>>> env = bsddb.db.DBEnv()
>>> env.open(None, bsddb.db.DB_CREATE | bsddb.db.DB_INIT_MPOOL)
>>> internal_db = bsddb.db.DB(env)
>>> internal_db.open('C:\objects.db', 'objects.db', bsddb.db.DB_BTREE, bsddb.db.DB_RDONLY)

Теперь я открыл базу данных, но ключи и значения закодированы в формате, который я не понимаю: например, вот некоторые ключи: '\x04++HMvu4v2GZbo1Ox\x00', '\x04++HMwBSPR8Zvwkt5\x00', '\x04++HMwF4OJ0R+WeSS\x00' и значение:

'\x01\x0b\xb7\r\x00\x05\xee\x89\x10\x029\x060\x04\x00/\x03\x04++HQqD0wWr_hZP75\x00\x00 \x02"\x06\x00$\x04inbox\x001\x02+\x04+33626320868\x00\x00%\x0e\x00\x00\x01.0\x19\xb3\x10&\x04Ok\x00-\rM\\/\x892\n:\r\x00\x05\xee\x89\'\x04sms\x003\n(\x04successful\x00.\rM\\/\x89\x00'

Я пытался декодировать его из utf8, но я не получил убедительных результатов. Вы узнаете, какая кодировка используется? Я не понимаю часть native byte-order вывода команды file, это может быть связано с этим?

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 апреля 2011

Образованное предположение

Из простого осмотра, сообщение, вероятно, "SMS успешно", с номером телефона:

Юникод (s, ошибки = 'игнорировать') u '\ x01 \ x0b \ r \ x00 \ x05 \ x10 \ x029 \ x060 \ x04 \ x00 / \ x03 \ x04 ++ HQqD0wWr_hZP75 \ x00 \ x00 \ x02 "\ x06 \ x00 $ \ x04inbox \ x001 \ x02 + \ x04 +33626320868 \ x00 \ x00% \ x0e \ x00 \ x00 \ x01.0 \ x19 \ х10 & \ x04Ok \ x00- \ гм \ / 2 \ п: \ г \ x00 \ x05 \ '\ x04sms \ X003 \ п (\ x04successful \ x00. \ гм \ / \ x00'

Я думаю, что другие символы являются двоичными данными.

Кодировка

Расшифровка не помогла - и chardet, и BeautifulSoup обнаруживают это как windows-1252:

>>> s=u'\x01\x0b\xb7\r\x00\x05\xee\u2030\x10\x029\x060\x04\x00/\x03\x04++HQqD0wWr_hZP75\x00\x00 \x02"\x06\x00$\x04inbox\x001\x02+\x04+33626320868\x00\x00%\x0e\x00\x00\x01.0\x19\xb3\x10&\x04Ok\x00-\rM\\/\u20302\n:\r\x00\x05\xee\u2030\'\x04sms\x003\n(\x04successful\x00.\rM\\/\u2030\x00'
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup(s)
>>> soup.originalEncoding
'windows-1252'
>>> chardet.detect(s)
{'confidence': 0.5, 'encoding': 'windows-1252'}

Однако декодирование 1252 не дает ничего значимого:

>>> s.decode('windows-1252')
u'\x01\x0b\xb7\r\x00\x05\xee\u2030\x10\x029\x060\x04\x00/\x03\x04++HQqD0wWr_hZP75\x00\x00 \x02"\x06\x00$\x04inbox\x001\x02+\x04+33626320868\x00\x00%\x0e\x00\x00\x01.0\x19\xb3\x10&\x04Ok\x00-\rM\\/\u20302\n:\r\x00\x05\xee\u2030\'\x04sms\x003\n(\x04successful\x00.\rM\\/\u2030\x00'
0 голосов
/ 10 апреля 2011

Попробуйте использовать PalmDB или dbsql вместо bsddb.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...