电子书格式探秘

1. epub格式我们非常熟悉,就是pk公司的压缩软件压制而成,所以可以用:右键-->打开方式-->压缩软件(很多种内核应该都差不多),开放使用,但核心是顶级机密的。我们不用也分析不了。

2.   mobi格式的(仅就英文文本和未加密的文档而言)相对比较压缩比较简单,有时我们看一眼也能猜到是什么内容,mobi的文本压缩大致如下:

a. 英文:开始时一定是完整的单词(因为前面什么都没有),如果有前面出现过的内容>=3 且<=10,用2个16进制数表示:前4位一定是80--BF(X000- ),后12位表示向前索引的值和长度。其中最后3位表示长度,9位右移3位得到的数是向前索引的值。例如: This
is a test.可以压缩成(This 8018a test)解释为(X000 0000 000X 0000)开头4位为8表示前面有出现过、后三位为0表示长度为0+3、最多等于(XXX)7+3、右移3位得到(000000XX),也就是说8080这个位置向前数3个字符(空格也是字符)长度为3得到is+空格。

b. 英文空格出现的频率很高,因此如果没有长度3-10的重复,空格就和后面的字符+80(16进制)合成一个字符,如:空格+He(48+80)编码为:C865,空格+he编码成:E865。F765解压为:we。

c. 中文和一些特别符号:看来mobi的压缩不适合中文,或许动态建议词典来索引,分析有难度,通常中文和特别符号用一个16进数表示:前4位一定是0(0000),后4位表示这几个字符没有压缩,如06表示:后面的6个字符没有压缩(照抄)。

以上是mobi格式压缩解压abc,实际文件还有其它图片、中文索引等内容的压缩,就没有办法分析了。

用delphi编写的解码程序如下代码:

begin  //开始逐字读入压缩的mobi,假定变量和函数已定义;

counter:=0; //计数器;

j:=0;   //读数器;

tm.Position:=0; //tm=TMemoryStream; 动态分配的内存且已经读入mobi文件;

while (j<size-2) do //size 为文件长度,可以根据文件索引调整起始位置;

begin

tm.Read(rd1,1); //读入一个字符;

inc(j);

fm.Seek(counter,0); // 定位指针要时而往前,时而往后,因此在读入每个字符时重新定位;

case rd1 of   //简单地用一个case分别处理不同情况;

$80..$bf:   //美元符号表示16进制数;仅初步判断到的可能大致分界。(压缩设计者会把所有能利用的空间想办法用足);

begin

tm.Position:=tm.Position-1;

tm.Read(bw,2);

bw:=swap(bw) and $7fff;

sm1:=CountTrace(bw)+3;

writeMem(sm1);

inc(j);

end;

$1..$0f:

for i:=0 to rd1-1 do

begin

tm.Read(rd2,1);

inc(j);

fm.Write(rd2,1);

inc(counter);

end;

$c0..$ff:

begin

c:=$20;

fm.Write(c,1);

inc(counter);

c:=rd1 and $7f;

fm.Write(c,1);

inc(counter);

end;

$0: inc(counter);

else

fm.Write(rd1,1);

inc(counter);

end;

end;

fm.Position:=0;

outstream.CopyFrom(fm,counter-1);

fm.Free;

tm.Free;

end;

以上程序在delphi7.0 编译通过。

时间: 2024-07-30 07:25:11

电子书格式探秘的相关文章

使用Calibre自带工具批量转换电子书格式

原来使用Calibre转换电子书格式都是先导入,再转换,再把转换后的文件复制出来,最后再改名. 虽然可以批量导入和转换,但复制和改名要一个处理.后来发现Calibre自带命令行转换工具,就写了一个批处理,可以把一个文件夹中的所有指定格式的电子书批量转换. 把以下代码复制到记事本上,保存为.bat文件,复制到电子书的文件夹中,双击运行. @echo off for %%a in (*.azw3) do ( "d:\Calibre Portable\Calibre\ebook-convert.exe

电子书格式怎么在线转换为PDF格式

电子书格式怎么在线转换为PDF格式,现在很多朋友喜欢用PDF格式的电子书,因为其有纸质书的排版和格局,但实际生活中出现的最多的是TXT等格式的电子书,那如何将其进行转换成PDF格式的呢,下面就由小编来告诉大家转换的解决方案.步骤一:打开电脑进入浏览器内在百度首页搜索"迅捷PDF在线转换器"找到相对应的页面.(可以提前将电子书文件保存至桌面上)步骤二:进入到在线的页面后在首页内的导航栏上找到文档转换,并在下拉框内选择"电子书转PDF".步骤三:进入在线转换器的功能页后

epub、ocf等常用电子书格式浅析----附JAVA示例程序

一. 电子书介绍 转载请注明http://www.cnblogs.com/xckk/p/6020324.html Epub(Electronic Publication)是一个完全开放和免费的电子书标准.是一个自由的开放标 准,属于一种可以“自动重新编排”的内容. “自动重新编排”的原因是内部使用XHTML来展现文件的内容,用一系列CSS来定义格式和版面设计,达到了内容和编排的分离. 现在EpubEpub包括三项主要规格: 开放出版结构(Open Publication Structure,OP

电子书格式转换

http://onlineconverter.epubor.com/ http://cn.epubee.com/ https://www.zhihu.com/question/19891104?sort=created

电子书格式在线转换

http://ebook.online-convert.com/

[原创开源项目]EPUBBuilder一款在线的epub电子书编辑工具

epub 感觉自己么么哒, epub书:国外最流行的电子书格式: epub电子书介绍: epub全称为Electronic Publication的缩写,意为:电子出版, epub于2007年9月成为国际数位出版论坛(IDPF)的正式标准,以取代旧的开放Open eBook电子书标准,epub这种格式kindel目前不支持, 必须用相应的软件打开,比如PC端用calibre, firefox的插件EPUBReader , chrome的插件Readium 等: 网络上也有EPUB书籍比较好的编辑

用calibre抓取RSS新闻制作电子书及推送到kindle

calibre可以从RSS源抓取内容,转换成它所支持格式的电子书,还可以推送到阅读器设备.下面来看看在calibre图形界面和命令行下如何实现这些功能. 在图形界面抓取新闻 自定义新闻来源 看看我们自定义了什么 命令行下生成电子杂志 命令行推送到Kindle 简单定时推送的实现 一些要注意的问题 其它方法 参考 calibre可以从RSS源抓取内容,转换成它所支持格式的电子书,还可以推送到阅读器设备.下面来看看在calibre图形界面和命令行下如何实现这些功能. 在图形界面抓取新闻 打开cali

kindle 电子书去除DRM

DRM,Digital Rights Management,数字版权管理. amazon购买的图书会下发到你的kindle设备,电子书格式通常为.azw3,里面包含了DRM,只能在你的设备上使用.所以设备连USB把文件取出来给别人是没用的. epubee这个软件可用来去除DRM,方便你自由分发. 以Windows Desk环境为例,见下图:

开源工具:将成为出版电子书的一种新途径

以往,我们想要出版一本书,是很困难的一件事.现在有很多开源工具,可以帮助你很方便的创建一本书. 我曾经出版了三本书,在创作的过程中,我明白了一个道理,有些事情比出版书籍更有意义,那就是多和世界分享你的书. 如果你出版书的时候采用EPUB格式,那么,你必须对你的书进行好好的检查,以确保书的格式是正确的.并且,如果你在亚马逊网站上的Kindle图书馆上出售自己的书籍的话,你需要把你的EPUB格式,转换成Kindle支持的格式. 下面我们将展示两种可供你选择的转换工具,并且都能达到你的要求. Epub