首先,用UE编辑器打开 mobi文件,如图:

mobi 文件揭秘

1. 地址0x4a到0x52 :000000DC  00000730 意思是:索引有0xDC 条(16进制),到0x0730结束。

接下来从0x56开始00000000 00001343 的意思是:第一节内容的地址,其中4字节位第几节编号不予

理会,00001343 是我们关心得内容。按每8个字节的间隔依次读入、解压就是mobi文件的真实内容。

2.  除了文本文件,mobi格式中还有章节索引和图片文件,一般放在文本文件之后,如下图:

mobi 文件揭秘

这些内容得地址在前面读取得地址中可以找到,这些内容是连续得(即没有压缩),可根据

INDX、JFIF判断(或根据起始内容)保存位toc 索引、图片(一般为封面图片或文章插图)。

为了简单,我们只关心文本部分内容。

第二 ,编写网页文件包含<input> 标签,指定类型为file 运行,如图:

mobi 文件揭秘

按地址00001343 读入内容,解压、在合适得容器中显示出来,如图

mobi 文件揭秘

上图左边栏是为了比较可以省略。解压文本的 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文本,看一下效果:

mobi 文件揭秘

mobi 文件揭秘

mobi 文件揭秘

mobi 文件揭秘

mobi 文件揭秘

mobi 文件揭秘 

mobi 文件揭秘

特色简介:动画翻页、便捷的索引、实际尺寸和kingdle相当。

 

相关文章:

  • 2021-11-29
  • 2021-11-17
  • 2021-11-28
  • 2022-01-20
  • 2022-02-07
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-12-23
  • 2021-11-13
  • 2020-03-22
  • 2021-07-13
  • 2021-11-03
  • 2022-02-27
相关资源
相似解决方案