首先,用UE编辑器打开 mobi文件,如图:
1. 地址0x4a到0x52 :000000DC 00000730 意思是:索引有0xDC 条(16进制),到0x0730结束。
接下来从0x56开始00000000 00001343 的意思是:第一节内容的地址,其中4字节位第几节编号不予
理会,00001343 是我们关心得内容。按每8个字节的间隔依次读入、解压就是mobi文件的真实内容。
2. 除了文本文件,mobi格式中还有章节索引和图片文件,一般放在文本文件之后,如下图:
这些内容得地址在前面读取得地址中可以找到,这些内容是连续得(即没有压缩),可根据
INDX、JFIF判断(或根据起始内容)保存位toc 索引、图片(一般为封面图片或文章插图)。
为了简单,我们只关心文本部分内容。
第二 ,编写网页文件包含<input> 标签,指定类型为file 运行,如图:
按地址00001343 读入内容,解压、在合适得容器中显示出来,如图
上图左边栏是为了比较可以省略。解压文本的 js 就一个简单的函数:
function readContent(){
var novelStr='',ch;
var i=0,l=runText.length; //根据地址读人得未解压的文本
while (i<l){
ch=runText.charCodeAt(i);
if((ch>=32)&&(ch < 128))novelStr+=runText[i]; //判断是不是一般字符、空格等
else {
var sw=ch&0xc0; //判断是否为 0x80--0xBF 还是 0xC0--0xFF
switch(sw){
case 0x80:
i++;
var idx,cnt,temp=(ch<<8) +runText.charCodeAt(i);
temp &=0x7fff;
cnt=(temp & 0x07)+3;
idx=novelStr.length-(temp >>3);
var s1=novelStr.substr(idx,cnt);
novelStr+=s1;
break;
case 0xc0:
novelStr+=' '+String.fromCharCode(ch & 0x7f);
break;
case 0:
cnt=ch&0x0f; //获得数值为往后照抄得字数
if(cnt==0)break;
i++;
var temp=runText.substr(i,cnt);i+=cnt-1;
novelStr+=temp;
break;
}
}
i++;
}
uncodeText.innerHTML=novelStr; //解压得文本放到容器中显示。
}
就这么简单!
苹果浏览器不支持File类型(其实没有必要、因为可以直接打开文件读人)、火狐浏览器、360浏览器可以。
下面用360浏览器读人mobi文件并保存为htm文本,看一下效果:
特色简介:动画翻页、便捷的索引、实际尺寸和kingdle相当。