很喜欢看CHM电子书,感觉篇幅不是很长,而且可以索引;但是昨天遇到这个问题:
打开文件的时候发现:
很喜欢看CHM电子书,感觉篇幅不是很长,而且可以索引;但是昨天遇到这个问题:
打开文件的时候发现:
意外发现当把文件压缩起来,居然可以打开查看:
怪事;
网上了解了一些内容,下面摘抄了部分内容:
====================================================================================================
.CHM格式(下文中省略前缀的dot)是上世纪90年代微软搞出来的,设计的初衷是用来做帮助文档。上图中可以看到,其官方全称是Compiled HTML Help file,即“已编译的HTML帮助文件”,也就是说,CHM文件实质上是一堆HTML网页文件打包。大家看见HTML可能以为CHM是一个开放的格式,很可惜不是,他们并没有将其做成PDF、DjVu那样的通用格式。因此结果是只有微软自家的阅读器可以查看(现在被移值到了其它平台,这是后话)。
除了专门的阅读器以外,CHM也有很多配套工具,比如制作工具、反编译器、转换软件等等。人们发现因为CHM这东西保留了HTML的特性,制作简便效果好,什么图片啊CSS啊脚本啊都能保留下来,所以慢慢地就流行开了。再后来,CHM格式被研究得差不多了,虽然官方没有公布详细规格书,但有人公布了非官方的逆向成果,因此配套工具就更齐全了,CHM就更流行了,甚至非Windows非x86的手持设备都可以阅读CHM了,- -b
尽管微软2002年就宣布不再进一步开发CHM格式(为了推他们的XPS),但由于CHM的群众基础太好(国内尤甚),这些年风头丝毫不减,情况基本与Windows XP类似,微软表示压力很大……好了,下面进入正题:
1、系统把CHM默认关联到%WINDIR%hh.exe,也就是Windows系统文件夹中的hh.exe,其属性如下图所示。这玩意儿相当于阅读器,就像HTML有web browser,PDF有Adobe Reader一样。
正常时双击CHM文件即可打开浏览,如下图所示:
问题:
2、问题描述:当CHM文件的路径(文件夹名和文件名)中含有#、%等特殊字符时,CHM文件能够打开,甚至可以看到导航栏,但就是无法显示其正文内容。
实践一下,在文件名中加一个#就打不开;
问题剖析:浏览一个CHM文件,实际上至少分为两个过程:
(1)首先,这个操作(双击文件图标)作为一个文件请求,在shell、文件系统、注册表等的作用之后,把文件的全路径作为一个参数传递给hh.exe并执行。这个过程只牵涉到文件系统,而#、%等字符在文件系统中不属于保留字符,没有特殊含义,因此这个过程完全正常。也就是,hh.exe能够得到这个CHM并开始解析其内部。
(2)真正的问题出在解析的时候。前面已经提到,CHM是一堆HTML的集合,这个集合是有组织的,而且还进行了LZX压缩。hh.exe解析这个CHM,并尝试呈现这堆HTML中被设置成首页的那一个。那么,hh.exe如何定位这个HTML?答案是URL,哈哈。我们来试试,右键点击属性,即可看到:
==========================================================================================================================
总结:原来打开需要编译哦,中文和非法字符在编译过程很容易出错;所以查看了自己的那个路径,发现确实包含中文和非法字符了,所以剪切到其他不含中文和非法字符的地方,终于打开了~~~~~~~