很喜欢看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,哈哈。我们来试试,右键点击属性,即可看到:

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

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

CHM无法正常显示的问题的更多相关文章

  1. 解决下载的CHM文件无法显示网页问题

    问题症状:打开CHM文件,左边目录齐全,可右边边框里却是无法显示网页. 解决方法:方法一:修改注册表1)新建一个文本文件2)添加如下内容:REGEDIT4[HKEY_LOCAL_MACHINE\SOF ...

  2. win7及以上系统打开chm空白或显示"无法打开"的2个解决方案

    1:在文件上右键单击属性.选择解锁. 2:确保文件路径中没有特殊字符.比如"#".如果路径中存在特殊字符,chm文件可能找不到路径而无法显示.如 d:\资料\c#\***.chm. ...

  3. 用微软官方的 HTML Help Workshop制作的CHM文件不显示图片解决办法

    制作CHM文档,方便小巧还易于查看,用处自不必多说了,最近想把这个季度所学习的内容全部制作成CHM格式文档,给自己后续用来温故而知新,同时也可以做为后起之秀避坑法宝.但是在生成CHM文档之后发现有些地 ...

  4. 问题-CHM文件不显示

    原问题:http://bbs.csdn.net/topics/370230310 问题描述: http://download.csdn.net/download/wybneu/3582721 我从这个 ...

  5. 打开 chm 帮助文件显示空白及解决方法

    有个很奇葩的解决方法:把 chm 文件用压缩软件压缩,然后用压缩软打开此压缩包,直接双击压缩包里面的 chm 文件 这虽然解决了问题,但是这不科学…… 分析:直接打开压缩包里面的文件,压缩包的文件是临 ...

  6. 【chm】【windows】win7下chm打开不显示内容

    修改chm属性里面,‘解除锁定’即可.点击chm文件,右键选择属性,点击最下方的解除锁定,保存,退出重新打开即可. ​

  7. Delphi 使用CHM文件制作系统帮助文档(上下文感知帮助的制作)

    一.基础知识简介         使用帮助提示窗口或状态栏只能提供简单.单一的帮助,无法对某一模块或应用程序整体提供系统的 帮助,因此运行Windows应用程序,需要帮助时一般都可以通过执行帮助菜单获 ...

  8. C# 如何生成CHM帮助文件

    原文:C# 如何生成CHM帮助文件 前一段时间应公司要求,让我开发一个数据库字段信息CHM帮助文件生成软件.结果当时我就二了,这个东西我只用过,不知道咋做啊.没想到老大很随意说一句:"没事, ...

  9. 解决150%DPI下Photoshop不能显示成合适大小的问题

    Adobe官方这里一直不给力,只能靠自己动手了. 和解决CHM高分屏显示的步骤差不多: Ctril+R,输入regedit编辑注册表. 进入到 HKEY_LOCAL_MACHINE > SOFT ...

随机推荐

  1. 使用iLO远程管理HP系列服务器

    iLO是Integrated Ligths-out的简称,是HP服务器上集成的远程管理端口,它是一组芯片内部集成vxworks嵌入式操作系统,通过一个标准RJ45接口连接到工作环境的交换机.只要将服务 ...

  2. python nose测试框架全面介绍二

    二.基本使用 nosetest脚本的使用(在安装完nose之后) nosetests [options] [(optional) test files or directories] 我们可以使用配置 ...

  3. mock server搭建及接口测试简单实例

    一.搭建mock server mock工具很多,这里我们选择用简单易操作的moco服务器 使用前必须先安装java,去相关网站下载Standalone Moco Runner 二.使用mock se ...

  4. 完美解决Android SDK Manager无法更新

    由于国内的各种屏蔽现在Android SDK Manager出现无法更新或更新太慢,如下方法可完美解决此问题 1. 打开..\Android\sdk\SDK Manager.exe  2.

  5. [励志英语片段]practicing deliberately

    最近看到一篇鸡汤文,觉得措词造句皆为吾辈所能接受,以后可以用作写作或口语素材~ 文章中心思想:同样是训练100小时,结果可以大不一样~所以不要用时间来欺骗自己. Consider the activi ...

  6. php curl常见错误:SSL错误、bool(false)

    症状:php curl调用https出错 排查方法:在命令行中使用curl调用试试. 原因:服务器所在机房无法验证SSL证书. 解决办法:跳过SSL证书检查. curl_setopt($ch, CUR ...

  7. CSU1129 送货到家 【状压dp】

    哈哈发现这道题竟然没有题解,于是我决定写一份! 状压dp 题目: 懒惰的巫女Reimu因为各种原因在香霖堂的店主Rinnosuke那儿欠下了很多债,于是乎只好靠帮他在幻想乡中送货来偿还掉微不足道的一小 ...

  8. Python中各种括号的区别、用途及使用方法

    python语言最常见的括号有三种,分别是:小括号( ).中括号[ ]和大括号也叫做花括号{ }.其作用也各不相同,分别用来代表不同的python基本内置数据类型. python中的小括号( ):代表 ...

  9. Oracle Function:TO_CHAR

    Description The Oracle/PLSQL TO_CHAR function converts a number or date to a string.将数字转换为日期或字符串 Syn ...

  10. PL/SQL自定义函数

    从SQL表达式中调用函数的限制 为了从SQL表达式中调用函数,一个用户定义函数必须: 是存储函数 只接受IN函数 只接收有受的SQL数据类型,而不接受PL/SQL数据类型 返回数据类型为有效的SQL数 ...