terasum / js-mdict

*.mdx/*.mdd interpreter js implements, support mdict index file
MIT License
154 stars 18 forks source link

多文件词典读取错误 #3

Open WingGao opened 4 years ago

WingGao commented 4 years ago
assert.js:339
    throw err;
    ^

AssertionError [ERR_ASSERTION]: key_block_info length should equal
    at Mdict._decodeKeyBlockInfo (/Users/x/Projs/youdao_wordbook_tool/node_modules/js-mdict/lib/MdictBase.js:391:28)
    at Mdict._readKeyBlockInfo (/Users/x/Projs/youdao_wordbook_tool/node_modules/js-mdict/lib/MdictBase.js:354:35)
    at Mdict.MDictBase (/Users/x/Projs/youdao_wordbook_tool/node_modules/js-mdict/lib/MdictBase.js:114:10)
    at new Mdict (/Users/x/Projs/youdao_wordbook_tool/node_modules/js-mdict/lib/Mdict.js:54:95)

用的是这本词典https://www.pdawiki.com/forum/thread-35803-1-1.html

songxiaocheng commented 3 years ago

似乎不是多文件的问题,而是词典版本小于 2.0 的问题。我手头的 2.0 版本的词典没问题,1.x 版本的都有同样的问题。

断言失败是因为 this.keyHeader.keyBlockInfoDecompSize 为0,而查看了下代码,只有版本在2.0以上的情况下才设置了该属性,版本小于2.0时该属性就保持初始值0了,如下所示: https://github.com/terasum/js-mdict/blob/a3f75312071d0433ff808f994ce4f7fbf292ad03/src/mdict-base.js#L287-L293

另外,似乎不止这处,其余多处断言也会在版本 1.x 的情况下失败。

希望早日修复,支持 1.x 版本的词典。

terasum commented 3 years ago

@songxiaocheng 你好,可以帮忙提供一个 1.0 版本的 mdx 词典吗,我手边目前都是2.0以上的,我也没有遇到过1.0的词库,所以我本地无法复现你说的问题。

songxiaocheng commented 3 years ago

@terasum 已经邮件私信发送到您的公开邮箱。