首页 > 技术文章 > CHM无法正常显示的问题

ITGirl00 2013-08-15 12:21 原文

很喜欢看CHM电子书,感觉篇幅不是很长,而且可以索引;但是昨天遇到这个问题:

打开文件的时候发现:

很喜欢看CHM电子书,感觉篇幅不是很长,而且可以索引;但是昨天遇到这个问题:

打开文件的时候发现:

 

 

意外发现当把文件压缩起来,居然可以打开查看:

怪事;

 

网上了解了一些内容,下面摘抄了部分内容:

====================================================================================================

        .CHM格式(下文中省略前缀的dot)是上世纪90年代微软搞出来的,设计的初衷是用来做帮助文档。上图中可以看到,其官方全称是Compiled HTML Help file,即“已编译的HTML帮助文件”,也就是说,CHM文件实质上是一堆HTML网页文件打包。大家看见HTML可能以为CHM是一个开放的格式,很可惜不是,他们并没有将其做成PDFDjVu那样的通用格式。因此结果是只有微软自家的阅读器可以查看(现在被移值到了其它平台,这是后话)。

        除了专门的阅读器以外,CHM也有很多配套工具,比如制作工具、反编译器、转换软件等等。人们发现因为CHM这东西保留了HTML的特性,制作简便效果好,什么图片啊CSS啊脚本啊都能保留下来,所以慢慢地就流行开了。再后来,CHM格式被研究得差不多了,虽然官方没有公布详细规格书,但有人公布了非官方的逆向成果,因此配套工具就更齐全了,CHM就更流行了,甚至非Windowsx86的手持设备都可以阅读CHM了,- -b

        尽管微软2002年就宣布不再进一步开发CHM格式(为了推他们的XPS),但由于CHM的群众基础太好(国内尤甚),这些年风头丝毫不减,情况基本与Windows XP类似,微软表示压力很大……好了,下面进入正题:

1、系统把CHM默认关联到%WINDIR%\hh.exe,也就是Windows系统文件夹中的hh.exe,其属性如下图所示。这玩意儿相当于阅读器,就像HTML有web browser,PDFAdobe 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,哈哈。我们来试试,右键点击属性,即可看到:

 

==========================================================================================================================

总结:原来打开需要编译哦,中文和非法字符在编译过程很容易出错;所以查看了自己的那个路径,发现确实包含中文和非法字符了,所以剪切到其他不含中文和非法字符的地方,终于打开了~~~~~~~

推荐阅读