从 python 读取 BerkleyDB 文件:`\x01\x0b\x88\x0c\x01`?

发布于 2024-10-31 19:38:12 字数 1364 浏览 1 评论 0原文

这个问题简而言之:\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,版本9,本机字节顺序)

尝试使用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解码它,但没有得到任何令人信服的结果。您知道正在使用哪种编码吗?我不明白 file 命令输出的本机字节顺序部分,它可能与此有关吗?

谢谢!

This question in a nutshell: what do \x04++HLMh7EjP3ILSfF\x00 and

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

mean?

Hi all,

I'm trying to read palm pre 2 database files. Some information is available in the documentation, but not enough for me to clearly understand the format.

Using the file command, I learnt that the format was objects.db: Berkeley DB (Btree, version 9, native byte-order).

Trying to open the database directly using bsddb.open() didn't work; I had to use

>>> 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)

Now I've open the database, but the keys and values are encoded in a format which I don't understand: for example, here are some keys: '\x04++HMvu4v2GZbo1Ox\x00', '\x04++HMwBSPR8Zvwkt5\x00', '\x04++HMwF4OJ0R+WeSS\x00', and a value:

'\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'

I tried to decode it from utf8, but I didn't get any convincing results. Do you recognize which encoding is being used? I don't understand the native byte-order part of the output of the file command, could it be related to this?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

手长情犹 2024-11-07 19:38:12

有根据的猜测

从简单的检查来看,该消息可能是“短信成功”,并带有电话号码:

<块引用>
<块引用>

unicode(s, 错误='忽略')
u'\x01\x0b\r\x00\x05\x10\x029\x060\x04\x00/\x03\x04++HQqD0wWr_hZP75\x00\x00\x02"\x06\x00$\x04收件箱\x001\x02+\x04 +33626320868\x00\x00%\x0e\x00\x00\x01.0\x19\x10&\x04Ok\x00-\rM\/2\n:\r\x00\x05\'\x04sms\x003\n( \x04成功\x00。\rM\/\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'

Educated guess

From simple inspection, The message is probably "sms successful", with a phone number:

unicode(s, errors='ignore')
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\x10&\x04Ok\x00-\rM\/2\n:\r\x00\x05\'\x04sms\x003\n(\x04successful\x00.\rM\/\x00'

I think the other characters are binary data.

Encodings

Decoding it did not help - Both chardet and BeautifulSoup detects this as 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'}

However, the 1252 decoding gives nothing meaningful:

>>> 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'
回忆那么伤 2024-11-07 19:38:12

尝试使用 PalmDBdbsql 而不是 bsddb

Try using PalmDB or dbsql instead of bsddb.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文