UMD 格式 解析规范(二)

数据块Content格式

现在说说数据块中的Content格式吧,根据数据块对应的功能块的不同,结构也不相同。现在让我们就按表1中的顺序逐个说明吧。
 
首 先是正文数据块,其Content中存储的是纯粹的字符串压缩数据(UNICODE编码的正文压缩数据)。要读取其中的数据,你需要先按正文数据块中的 Length-9来从文件中读出压缩数据,然后使用zlib解压缩得到正文文本。需要注意的是解压出来的正文中,换行字符并非Windows下的”\r \n”,而是0x2029,据了解说是symbian下的换行符。这意味着你可能需要特别处理(如替换0x2029为\r\n)0x2029才能在 windows下显示出全部的文本。


现在说说封面,其Content是个图像文件,你读出数据然后另存为图像就可以。图像具体格式信息存储在对应的功能块中。
 
再说章节偏移,里面存储的是各个章节在正文(解压后的文本)中的偏移,即表示第几章是从何处开始的。每个偏移使用4个字节,由此我们可以知道Content总一共存了(Length-9)/4个偏移。
 
现在说章节标题,它的Content是一个简单模式的重复。这个模式就是:标题长度-标题内容。其中标题长度用1字节保存,标题内容紧跟在标题长度之后,内容也是UNICODE的,不过是明文,没压缩的。用个表来说明下就一目了然了:

Chap1长度

Chap1内容

Chap2长度

Chap2内容

……

ChapN长度

ChapN内容

 

页面偏移不具体写了,下表中列出了其格式,对应于0x87

对应的块标识

数据块描述

Content

字段大小

字段描述

共计

0x81

正文结束

BlockRandom

4

一个BlockRandom指向一个

正文数据块的RandVal

4*N

……

4*(N-2)

BlockRandom

4

0x82

封面

Image

N

图片文件数据

N

0x83

章节偏移

Offset

4

每个Offset都代表了一个章节

在正文数据中的偏移。

4*N

……

4*(N-2)

Offset

4

0x84

章节标题

Len 1

1

第一章标题长度

Len(1)

+Len(2)

+…

+Len(n)

+n

Cont 1

Len(1)

第一章标题内容

……

/

/

Len n

1

n章标题长度

Cont n

Len(n)

n章标题内容

0x87

页面偏移

Offset

4

此块与章节偏移块类似,都存储的是偏移

不过这里是每一页的偏移。

4*N

……

……

Offset

4

-5 各数据块的Content格式



最后,来看看在一个完整的UMD文件中,各个块的详细分布情况:

0xDE9A9B89

UMD文件标识

0x01

UMD文件说明(文本,图片)

0x02

文件标题

0x03

作者

0x04

0x05

0x06

0x07

小说类型

0x08

出版商

0x09

零售商

0x0b

内容长度

0x83

章节偏移,功能块

{Data}

章节偏移,数据块

0x84

章节标题,功能块

{Data}

章节标题,数据块

{Text Data 1}

正文压缩数据块,下同(蓝色)

{Text Data 2}

 

……

 

0x0a

CID标识,随机出现在正文数据块间,原因不明

……

 

0xf1

Licence Key,随机出现在正文数据块间,原因不明

……

 

{Text Data n-1}

 

{Text Data n  }

 

0x81

正文结束,功能块

{Data}

正文结束,数据块(保存所有的正文数据块索引)

0x82

封面,功能块

{Data} JPG

封面,数据块(JPG

0x87

页面偏移,功能块,字号、屏幕宽度不同会有多个

{Offset Data 1}

页面偏移,数据块,下同

0x87

页面偏移2

{Offset Date 2}

 

……

 

0x87

页面偏移m

{Offset Date m}

 

0x0c

UMD文件结束,功能块

UMD文件标识

基本属性头

章节偏移及标题

正文压缩数据

ZLIB

正文数据索引

封面

页面偏移

结束

 

上面的表是对左边表的简化。

 

表中颜色说明:

 

功能块

 

带数据块的功能块

 

数据块

 

正文数据块

 

 

 

 

 





参考

从第一次接触UMD至今有好几个月,期间陆陆续续的找到些资料,下面就按我接触的时间顺序排列:

1、    主题:手机Umd文件格式浅析

2、    手机电子书UMD数据格式实现代码(C#版)

3、    Umd_builder Goole Code

4、    umd文件结构深度解剖(附手机umd电子书生成算法类|PHP版)

你可能感兴趣的:(UMD 格式 解析规范(二))