如何把 MDX 格式词典转换成 MOBI 格式的 Kindle 字典
注意,本文提供的方法某些步骤依赖 Windows 系统,如你使用的是其它系统(如 macOS),可参考《PyGlossary:将其它格式的字典转换成 Kindle 字典》这篇文章提供的跨平台解决方案。
目前 Kindle 字典资源(尤其是小语种字典)还不算太丰富,其来源除了亚马逊官方为 Kindle 提供的一些字典外,就是第三方机构制作或网友自制的字典了。而网友自制的字典,大部分都是通过其它字典格式转换而来,毕竟除非是专业从事制作字典工作的,手工录入词条不太现实。
本文要介绍的便是转换 Kindle 字典的一种方法,即把 MDX 格式的词典转换成适用于 Kindle 的 MOBI 格式字典。MDX 也是一种字典格式,而且相比 Kindle 的 MOBI 格式字典,资源更为丰富一些,你可以通过相关的资源站点(如PDAWIKI、星际译王词库、OwnDict)下载 MDX 词典资源,也可以通过搜索引擎搜索“mdx词典”寻找 MDX 词典资源。本文同样适用于 StarDict 字典的转换。
只要你有 MDX 词典文件或其源文件(包含 dict、idx 和 ifo 三个文件),就可以通过下面的方法将其转化成 Kindle 字典。感谢 Kindle 伴侣交流 QQ 群(一群)的小伙伴 @汪星人 提供的转换步骤,以下内容便是以此为蓝本修缮而成。本教程仅适用于 Windows 系统。
一、准备工作
转换过程中需要用到以下软件,请点击链接下载备用。
- GetDict.exe:百度网盘 * 转换 StarDict 字典可不下载
- python:官方下载 * 请安装 2.7.x 版本,如果系统已安装请忽略
- tab2opf.py:百度网盘【提取码:
7eib
】 - mobigen.exe:百度网盘
- StarDict:百度网盘
二、转换步骤
下面以 MDX 格式的“牛津高阶英语词典(第8版)”举例说明(你也可以使用自己下载到的 MDX 词典文件),详细演示如何一步一步地将其转换成 MOBI 格式的 Kindle 字典。
1、将 MDX 字典转换成 MDX 源文件
运行程序 GetDict.exe。在“选择MDX词典”这项中,点击【浏览…】选择准备好的 MDX 文件,如“牛津高阶英语词典(第8版).mdx”;在“转出文件”这项中,点击【浏览…】选择字典源文件输出路径,建议新建一个文件夹,如“oa8”,输入文件名,如“oa8”,点击【保存】按钮;其它选项保持默认,点击【开始转化】按钮,在弹出的对话框“词典名称”中输入词典的名称,如“oa8”,点击【确定】按钮开始转换。
转换完毕后,在“oa8”这个文件夹中会出现 oa8.dict、oa8.idx 和 oa8.ifo 三个文件。
注意,如果你下载到 MDX 词典本身就是源文件的形式,则可以忽略上面的步骤。不过如果遇到词典源文件后缀为 .dict 的文件后还有一个 .dz,如“***.dict.dz”,需要将 dz 重命名为 gz,并用 7-zip 软件解压,得到“***.dict”文件,然后将后缀名为 .dict 的文件名重命名一下,和其他两个文件的文件名统一起来。
2、将 MDX 字典转换成 TXT 文件
解压缩下载到的“StarDict.zip”,运行文件夹里的“stardict-editor.exe”,切换到“DeCompile/Verify”标签,点击【browse…】按钮,选择“oa8”文件夹中的后缀名为 .ifo 的文件。然后点击【Decompile】按钮,稍候片刻。直到出现提示信息“Done!”,即表示转换成功。
此时“oa8”文件夹中会出现一个转换得到的名为“oa8.txt”的文本文档。
建议检查一下这个文档的内容是否显示正常,如果出现了乱码,请将其更改成正确的编码再保存。否则,后面转换字典文件时出现类似“Source file is not valid UTF8.
”的错误提示。
3、将 TXT 文件 转换成 MOBI 源文件
把 tab2opf.py 拷贝到“oa8”文件夹内。打开“命令提示符”,并用 cd 命令切换到“oa8”目录下,输入以下命令(如果已将 python 添加到环境变量则无需输入 python 的全路径):
C:\python27\python.exe tab2opf.py -utf oa8.txt
等待命令运行完毕之后,在“oa8”文件夹下会出现一个 .opf 文件和几个 .html 文件。用记事本或代码编辑器打开其中的 .opf 文件,然后找到如下所示这段代码:
<metadata>
<dc-metadata>
<dc:Title><h2>oa8</h2></dc:Title>
<dc:Language>en</dc:Language>
<dc:Identifier id="uid">oa8</dc:Identifier>
</dc-metadata>
<x-metadata>
<DictionaryInLanguage>en-us</DictionaryInLanguage>
<DictionaryOutLanguage>en-us</DictionaryOutLanguage>
</x-metadata>
</metadata>
请按照下面的提示说明(红色字符部分)修改上面所示代码:
<dc:Title><h2>词典的名字</h2></dc:Title>
<dc:Language>词典的语言</dc:Language>
<DictionaryInLanguage>输入的语言</DictionaryInLanguage>
<DictionaryOutLanguage>输出的语言</DictionaryOutLanguage>
其中“词典的名字”即是 Kindle 字典的正式名称,如本例中可将其修改为“牛津高阶英语词典(第8版)”。词典的语言一般不用修改,关键在于输入和输出的语言。如果是英汉词典,输入为英语 en-us,输出为汉语 zh;同理,如果是日中词典,则输入为日语 ja,输出为汉语 zh。
* 提示:language
标签中的“语言代码”需符合 RFC5646 标准(来源),如 en
、zh-CN
,DictionaryInLanguage
和 DictionaryOutLanguage
标签中的“语言代码”需符合 ISO 639-1 标准(来源),如 en
,可附加区域性代码,如 en-us
。
修改完毕后,另存为,文件名不要改动,在“编码”选项中选择“UTF-8”,然后点击【保存】按钮。
* 提示:在此步骤中使用 tab2opf.py 进行转换可能存在变形词无法识别、词典过大的问题,为达到更好的转换效果,Windows 用户可以尝试网友开发的转换软件 MDictindle。
4、将 MOBI 源文件转换成 MOBI 文件
把 mobigen.exe 拷贝到“oa8”文件夹内。把刚才生成的那个 .opf 文件拖放到 mobigen.exe 文件上,mobigen.exe 就开始将 MOBI 源文件转换成 MOBI 文件了,转换所需时长根据字典大小而有所不同。
最终得到的 MOBI 格式文件就是转换好的字典文件了。将其拷贝到 Kindle 中即可使用。
注意,在转换的过程中会出现类似“Warning(prcgen):Some syntax error happend in a script …”或“Error: Unexpected token found”之类的提示,这是因为源文件中有一些 javascript 脚本,在转化的过程中被 mobigen 忽略掉了。经过测试不影响最终生成字典文件的使用。
三、已知问题
通过此方法转换的字典,其查询是严格匹配,不支持模糊检索,所以会导致单词变形无法匹配。
© 「书伴」原创文章,转载请注明出处及原文链接:https://bookfere.com/post/308.html
延伸阅读
- [每周一书]《回归故里》关于原生阶层的自我解剖
- Kindle Voyage 阅读器深度评测(一):第一印象
- 亚马逊发布全新第四代 Kindle Paperwhite(KPW4)
- 如何恢复误删的“我的剪贴”文件 My Clippings.txt
- [每周一书] 利用《模型思维》解决工作生活难题
- 亚马逊已经成为美国电子书大战的赢家?
- KindleEar 搭建教程:推送 RSS 订阅到 Kindle
- 一键修复 KOReader 中的谷歌翻译功能
- 拿破仑的 Kindle:揭秘皇帝战时携带的微型移动图书馆
- [2018.12.13] Kindle 阅读器固件升级至 5.10.2
- [每周一书]《正义之心》为什么人们总坚持“我对你错”
- Kindle Paperwhite 2 内存存储容量升级到 4G
- [每周一书]《纳什均衡与博弈论》博弈论科普入门
- Kindle 越狱支持一览:检查 Kindle 设备能否越狱
- 最新电子阅读器旗舰 Kindle Oasis 上手简评
您好,运行了c:\python27\python.exe tab2opf.py -utf oa8.txt之后出现下列错误,请问有什么办法解决。
*
100鍗冨厠
10鏈
11涓栫邯鍒?8涓栫邯鐨勫▉灏兼柉鍏卞拰鍥絋raceback (most recent call last):
File “tab2opf.py”, line 254, in
print dt
IOError: [Errno 0] Error
这个需要测试,建议把文件发到书伴邮箱(页面底部“联系”处获取)。
已经发了。
一样问题,请问是怎么解决的?
这是由于某些字符的编码问题导致的。有两种解决方法,一种是用代码编辑器编辑 tab2opf.py 文件,找到 254 行,将
print dt
改为print dt.decode('utf-8')
;另一种是直接删除print dt
这一行,如果你不需要在命令提示符显示转换过程的话。谢谢解答,再请教下”代码编辑器”具体指什么软件呢?我用手头一个文本编辑器editplus打开,找不到你说的内容
改用notepad++解决了,再次感谢
第三步,等待命令运行完毕后,只出现一个.html文件是什么问题
花了一下午时间研究了下,搞出来一部词典,但是放到kindle里发现词典名是乱码,勾选词语之后也无法进行查询,不知道是什么原因。把词典文件用previewer打开后是可以看到内容的,请教是什么原因
修改 .opf 文件后,保存时需要选择 UTF-8 编码,有没有忽略这一步?
选择了的,确切的说原本文件的编码就是utf8的
为方便排查问题,建议把字典文件发送到书伴邮箱(页面底部“联系”处获取)。
已经发送成功,请查看
我用你发给我的 MDX 文件按照本文的步骤操作了一遍,得到的字典是正常可用的。
然后我又回顾了一下转换过程,只有一个地方需要注意,那就是在使用脚本 tab2opf.py 的时候一定要添加参数
-utf
,否则生成的字典不可用。我已经通过邮件把转换后的字典文件的下载链接发给了你,可以测试一下。
执行完第三步后,这时得到了一个OPF和几个HTML。结果发现坑爹的一幕出现了,对HTML添加CSS效果的时候发现,margin-right是无效的,甚至margin-left也只是在转成mobi后成为了一个blockquote标签。MOBI本身不支持margin…..迷了。但是kindle官方发布的文档里面显示了margin是支持的,可是用kindlegen生成的也是mobi,仍然不支持,陷入了一个谜一般的循环??站长知道这个吗?求解答?也许azw或者azw3支持margin,但是问题是怎么把opf和几个html生成azw或azw3呢??
刚刚查了一下,没戏了。kindlegen不能对字典不能生成KF8标准的格式,所以无解。
如果在 OPF 文件中指定了字典类型元数据,KindleGen 在自动转换时自动降级成 mobi7 格式,这种老式格式不支持 CSS 样式。
字典主要用来查词用,查询的内容也只会在查询框里显示,也无法应用样式。如果想要有限更改某些外观,比如加粗、加大字号,可以尝试用 HTML 原生的一些古旧标签,比如 <b>、<font> 标签来应用这些样式。
如果只是想当做纯粹的电子书阅读,可以不在 OPF 文件中添加指定字典类型的元数据。
感谢站长的解答,确实如此,而且看起来亚马逊似乎并没有为字典提供KF8支持的打算,因为早在2013年就有人提过这个问题了…..
你好,我用大辞海的mdx做kindle词典,做到最后一步,命令提示符提示很多条重复的信息,如:Error(core):Cannot concatennate strings.Incoherent encodings. 再如:Warning(index build ):Unsuported Html entity or impossible to map the entity to the current encoding.等提示,没有生成文件,
错误显示有不支持 HTML 实体。那个字典里有特殊字符吗?
输出后没有opf文件
(just) for the record
(just) in case ( 鈥?)Traceback (most recent call last):
File “tab2opf.py”, line 254, in
print dt
IOError: [Errno 0] Error
最后的输出
“”” % (dt, dtstrip, dd))
print dt
i += 1
to.write(“””
报错这里又问题
尝试把 print dt这一行注释掉,你会发现程序执行速度飙升,也会避免一些奇怪的错误。本人亲测。
有支持模糊匹配的方法吗
现在还没有支持模糊查询地OA8吧?
打开“命令提示符”,并用 cd 命令定位到“oa8”目录下,这一步怎么操作啊,可以详细一点吗
就是在命令提示符中输入命令 cd 后面跟上 oa8 的路径。给你说个小技巧,在命令提示符上输入 cd 加空格,然后直接用书把 oa8 拖放到命令提示符上,这样就不用手动输入路径了。
All Hallows鈥?EveTraceback (most recent call last):
File “tab2opf.py”, line 254, in
print dt
IOError: [Errno 0] Error
运行
c:\python27\python.exe tab2opf.py -utf oa8.txt
后出现报错 应该怎么办?
你好,请问生成mobi格式了,但是为什么是0k呢,是转换失败了吗?
文件比较大的话,转换过程会比较慢,你看到的的 0KB 文件应该不是最终成功生成的文件。
是的,后来我换成牛津词典,成功了,但是为什么在转换之前那个词典到最后生成mobi的时候,软件崩溃呢,试了三次了
这个情况以前遇到过,有时候重试几次可能会成功,有时就不行,尤其是文件较大的时候,这可能和软件有关系。
我这里有个葡英词典源文件,希望能转换成Kindle词典,并且能够通过变位动词查动词原形及其释义。
求大神帮忙。
站长大大,第3步出现这个问题怎么办?
下面是cmd里输入tab2opf.py -utf oa8.txt 后的提示
C:\Users\Administrator\Desktop\oa8>tab2opf.py -utf oa8.txt
File “C:\Users\Administrator\Desktop\oa8\tab2opf.py”, line 199
print “tab2opf (Stardict->MobiPocket)”
^
SyntaxError: invalid syntax
好像有什么语法错误的
命令运行完毕之后,在“oa8”文件夹下会没有出现一个 .opf 文件和几个 .html 文件,
建议把问题描述的更详尽一些。比如运行命令之后没有出现这些文件,出现了什么?或者有什么具体的提示信息?
可以帮我转一下格式吗?我试了很多次都没有办法。感激不尽。
提示 unicode decode error: utf8 can’t decode bye 0xe9 in position 1: invalid continuation byte
感觉这个提示仍然是文档的编码问题,在转换之前建议先把编码问题解决掉。
站长好,在转换汉语词典是已将三处的language改为zh, 为何中文词条是乱码呢?谢谢
导致中文词条乱码应该和更改 language 没关系,而是文件编码的问题。