简介:CHM Editor 1.3 Build 034 绿色多国语言版是少有的能直接编辑并保存 CHM 文件的实用工具,主要面向需要翻译电子书、反编译 HTML 帮助文件的普通用户和专业译者,也适合软件文档维护人员使用。它支持调用在线翻译服务直接处理整个 CHM 文档,并完整保留原有 HTML 标签与目录结构,还提供命令行操作和批量处理能力,便于流程化转换。压缩包共 19 个文件、约 3.11MB,类型以 exe 主程序、lng 语言包、chm 示例文档和 tips 提示文件为主,另有 reg 注册表设置与 htm 说明页,解压即可绿色运行,方便随身携带。目前已有 249 人学习。该版本内置中英文等多国语言界面,可在语言菜单中一键切换为简体中文,并附带多种界面模板与使用说明,帮助快速上手;两个可选补丁文件可满足不同用户的个性化需要,适合翻译、文档维护、批量转换 CHM 为 HTML 或跨设备浏览等场景使用。 CHM 格式至今还在被大量软件产品文档、企业知识库和课程资料使用,但绝大多数人只会双击打开,一旦需要修改就抓瞎。我这段时间处理一批老旧的 CHM 帮助文档,把一个免费的绿色版工具翻来覆去试了一圈,最后固定用下来的,就是 CHM Editor 绿色版 1.3 Build 034。这篇文章把它的用法、坑和替代方案一次讲清楚,适合需要维护 CHM 文档的开发者、技术写作和本地化从业者参考。
1. CHM 的宿命与顽固需求:为什么这个“过时”格式死不了
1.1 被误读的“过时格式”:底层逻辑解析
CHM 的全称是 Compiled HTML Help,很多人以为它就是“把一堆网页压缩成一个文件”,这个理解对了一半。CHM 的核心是一个经过 LZX 压缩的复合文档,里面打包的不仅有 HTML 页面,还包含一套完整的信息检索系统。一个典型的 CHM 内部至少有几个关键组成部分:
- HTML 页面文件,承载全部正文内容;
- .hhc 文件,定义左侧目录树的层级结构;
- .hhk 文件,存放关键词索引,供“索引”选项卡使用;
- 可选的全文本搜索配置和二进制索引文件,支持全文检索;
- 编译时的项目文件 .hhp,记录所有源文件的组织方式、默认页面、窗口设置等。
这套结构使得 CHM 拥有单文件分发、压缩率高、不依赖现代浏览器解析、Windows 系统自带解析能力等优势。所以十几年过去,不少商业软件的帮助文档、内部系统的操作手册、按光盘或安装包交付的知识产品,仍然是 CHM 格式。阅读器一大堆,可是真正能对 CHM 进行编辑、特别是能正确处理目录树和索引的工具,少得可怜。
1.2 热词背后的真实需求
“CHM Editor”在搜索引擎里长期保持热度,这很说明问题。搜索这个词的人,大概率不是想找一个阅读器,而是要把某个 CHM 打开、改内容、再重新编译回去。常见场景包括:软件本地化之后需要替换帮助文档中的语言;公司换名或产品迭代后需要批量更新手册中的名称和链接;培训机构需要把旧课件中的 CHM 资料拆开重组;或者只是当年制作 CHM 的源文件已经丢失,只能从已编译文件逆向修改。
这些需求的共同点是:看起来只是“改个文字”,实际上要触碰 CHM 的容器结构和编译逻辑。CHM Editor 这类工具的价值,就是把这个过程从“手工拆包、改页面、再想办法编回去”变成可视化、可操作的工作流。
2. CHM Editor 的核心工作逻辑:它不是“改文件”,是“改容器”
2.1 解包、修改、再打包三步循环
使用 CHM Editor 时要先建立一个认知:它不像 Word 那样直接对最终文件做“原地编辑”,而是把 CHM 当成一个容器,打开时解包,保存时重新编译。
具体流程大体是这样的:打开 CHM 文件后,软件会解析出内部目录结构,在左侧显示目录树,右侧显示页面预览和源码编辑器。你对页面做的任何改动,最终都会被重新写回一个编译好的 CHM 文件。这个“重新编译”步骤,才是 CHM Editor 真正的核心能力。
这也就解释了为什么它是“绿色版”也能正常工作:CHM 的解包和编译能力理论上可以依赖 Windows 自带的 HTML Help 组件(hh.exe、hhc.exe),CHM Editor 做的,是把这些底层能力包装成更友好的编辑界面。绿色版省掉了安装写入系统目录和注册表的过程,解压后就能跑,但底层依赖的 HTML Help 相关组件仍然是 Windows 系统自带的,这不算软件的缺陷,而是 CHM 格式本身的平台属性。
2.2 目录树与字段编辑:最实用的部分
如果你是第一次用,建议先从目录树入手。CHM Editor 左侧树状结构对应的就是 .hhc 文件,你可以直接在界面上新增、删除、重命名节点,调整层级顺序。改完之后,目录树会跟随页面标题同步变化,这比手工编辑 .hhc 文件里的 XML 结构要直观得多。
除目录外,软件还支持编辑整份 CHM 的项目属性,包括默认页(default.htm 或 index.htm)、编译参数、语言标识、窗口标题等。修改这些字段时,软件会在后台同步更新 .hhp 和相关的配置数据,不需要你像用 HTML Help Workshop 那样维护多个分散的配置文件。
2.3 多国语言切换的实机表现
“多国语言版”是这个版本号里比较实用的一个卖点。CHM Editor 多国语言版把界面语言做成了独立资源,不依赖系统区域设置,在软件设置里切换语言后重启即可生效。实测在中文 Windows 环境下切换到中文界面没有出现乱码或资源错位的问题。对需要面向不同语言同事维护文档的团队来说,这个细节省去了不少沟通成本。
3. 绿色版实测记录:解压、运行、改一个真实 CHM
3.1 解压与便携性取舍
我下载的压缩包不到 20MB,解压后直接运行主程序即可。没有安装向导、没有写入 Program Files、没有开机启动项,所有配置统一保存在程序目录或者当前用户的 AppData 配置文件中,具体路径可以在软件的选项中查看。这种便携性在需要维护多台电脑、或者想把工具一起放进文档备份目录的场合非常实用。
需要注意的一点是,绿色版不负责帮你处理运行库。如果你的 Windows 缺少对应版本的 VC++ 运行库,打开时可能会报缺少 DLL,这属于运行环境问题,不是软件本身损坏。建议在干净的虚拟机或新系统上先跑一次,确认基础组件齐全后再投入正式使用。
3.2 实际编辑一个 CHM:从打开到重新编译
为了验证软件的真实能力,我拿一个公司内部培训手册做了完整测试。这个 CHM 大约 50 多页,包含三层目录、图片资源、全文搜索索引。我的任务有两个:把文档中旧产品名称全部替换成新名称,并在目录树“常见问题”节点下方新增一个条目。
操作路径是这样的:
- 用 CHM Editor 打开 CHM 文件,等待目录树和页面加载完成;
- 使用查找替换功能,在全文范围内替换产品名称。这里要注意,如果你只想替换正文,不替换目录标题,就先在左侧目录树里检查一遍所有节点文本,记下需要手动修改的位置;
- 在左侧目录树定位到“常见问题”,右键新增节点,填写标题,新建对应的 HTML 页面;
- 编辑新页面的正文内容,插在指定位置;
- 核对所有图片和链接路径,确保新的 HTML 引用的资源都存在;
- 执行编译输出,另存为一个新的 CHM 文件,不覆盖原文件;
- 用 Windows 自带的 hh.exe 打开输出文件,检查目录树、页面跳转、搜索功能是否正常。
整个流程大约 20 分钟。在没有源文件、只有已编译 CHM 的情况下能做到这个程度,已经比很多号称支持 CHM 编辑的工具靠谱得多。特别值得肯定的是搜索索引的更新,软件在重新编译时会同步刷新全文搜索数据,不需要你手动处理索引文件。
3.3 外部工具协同:没有它也能做,但有了它效率翻倍
以前在没有 CHM Editor 这类工具时,处理 CHM 的常规路线是:用 7-Zip 或 hh.exe 的 -decompile 参数解开 CHM,得到一堆 HTML 和配置文件;然后用文本编辑器改 HTML;最后用 HTML Help Workshop 重新编译。
这条路不是不行,但有几个痛点:HTML Help Workshop 本身是二十多年前的软件,界面老旧,处理大目录树和中文编码时经常出问题;维护 .hhc、.hhk 和 .hhp 三个文件的同步关系非常消耗精力,稍有不慎就目录和页面对不上。CHM Editor 把这三步合并成一个可视化操作,对目录树、页面内容、编译配置和索引的处理都在同一界面内完成,效率差距不是一点半点。
4. 实战排坑:编译报错、字符集乱码、路径引用失效这三道坎
4.1 编译后目录树丢失或顺序错乱
第一次用 CHM Editor 时,我遇到过编译成功后目录树节点大量丢失的情况。排查思路是这样的:先确认是不是 .hhc 文件没有正确加载。CHM Editor 在打开 CHM 时会解析 .hhc,如果这个文件本身包含异常的编码声明或非标准嵌套,软件可能采用容错模式处理,界面上看着节点都在,但保存时某些节点没有落到编译输入中。
解决办法是:在左侧目录树里逐级展开,确认每个节点是否关联了有效页面。正常情况下,节点前面会显示一个页面图标,如果有关联失效的节点,图标会变成空白或在属性面板里显示文件缺失。处理完所有失效节点后重新编译,目录树就正常了。这个问题在从老版 HTML Help Workshop 生成的 CHM 上更常见,原因是老工具生成的 .hhc 在编码声明上往往不够规范。
4.2 中文内容乱码:字符集与编码的恩怨
中文 CHM 乱码基本都出在字符集不匹配上。CHM 页面文件保存时可能是 UTF-8,也可能是 ANSI(国内常用 GBK/GB2312),如果页面中没有明确的声明,编译器按默认编码处理,结果就是打开后出现“锟斤拷”这类经典乱码。
处理方式分两步。第一步,判断原文件编码。用 CHM Editor 打开有问题的页面,切到源码模式,查看 HTML 头部的 charset 声明,同时检查页面里中文字符的实际编码。第二步,统一输出编码。建议把整个文档的中文页面统一转成 UTF-8,并在每个页面的 head 中明确声明<meta charset="utf-8">,然后在 CHM Editor 的编译选项中设置默认编码为 UTF-8。这样虽然改动量大一点,但一劳永逸,后续维护不再受编码问题困扰。
从实践来看,遇到乱码不要急着逐个页面修改乱码字符,优先处理编码设置,多半能一次性解决大片问题。
4.3 相对路径与资源引用失效
这个坑是我在新增页面时踩到的。我在文档根目录新建了一个 FAQ.html,页面里引用了images/logo.png,但在编译后的 CHM 里图片始终不显示。检查发现,CHM 内部对资源引用是区分大小写的,而且路径层级必须与编译输入目录完全一致。也就是说,如果 CHM 的 source 目录下图片挂在Images文件夹,而我在 HTML 里写的是images/logo.png,Windows 文件系统能识别,但 CHM 编译器不一定认。另外,不要在相对路径中使用../跳出源目录,CHM 编译对这种越界引用支持很差。
解决办法是:在编辑页面时随手检查资源引用,尽量使用与源目录完全一致的相对路径;新增页面时先确认图片资源已经放在源目录下,再写引用;编译前用资源管理功能检查一下是否有未纳入编译的文件。
4.4 “用绿色版还要带一堆 DLL”的真相
有人反馈在部分电脑上绿色版运行不了,报缺少 msvcp*.dll 或者无法定位程序输入点。这基本不是软件的问题,而是系统缺少运行库。CHM Editor 的安装版会在安装时自动检测并补装运行库,绿色版为了保持免安装,省掉了这一步。
实操建议是:在团队内部分发绿色版时,把对应的 VC++ 运行库安装包一起放进工具目录,并在说明文档里标注“如果启动报错请先安装 vc_redist”。这个细节能让你的“绿色版”在更多电脑上真正即开即用,避免同事拿着压缩包到处问为什么打不开。
5. 文档维护者关心的另外两件事:批量替换与版本协同
5.1 批量替换的实现思路:编辑器内置功能 vs 外部脚本
CHM Editor 内置了查找替换,能覆盖正文和页面源码,但实测它对“精确替换”的支持还行,却没有正则表达式能力。如果你需要做复杂的批量替换,比如把一组带版本号的链接统一换成新的 URL 格式,靠内置功能很难一次完成。
我的做法是分两层处理。简单的固定字符串替换,直接在 CHM Editor 里做,因为这种方式改动后可以立即在软件里编译,风险小;复杂的、带模式匹配的批量操作,先用 7-Zip 把 CHM 解包到临时目录,用脚本在 HTML 文件组上做替换,处理完之后再在 CHM Editor 里打开 .hhp 项目文件重新编译。
这里补一个 Python 脚本思路,供需要处理大量文件的人参考:
import re from pathlib import Path src_dir = Path("./unpacked") for f in src_dir.rglob("*.htm"): text = f.read_text(encoding="utf-8", errors="ignore") # 把旧域名替换成新域名,保留路径部分 new_text = re.sub(r"https?://old\.example\.com(/[^\"'\s)]*)", r"https://new.example.com\1", text) if new_text != text: f.write_text(new_text, encoding="utf-8")注意处理之前先备份源文件,脚本跑完后抽查几个文件确认替换结果,再进 CHM Editor 编译。这个流程我用了多次,稳定可靠。
5.2 和 Git/SVN 一起工作时的注意事项
CHM 是编译后的二进制文件,直接放进 Git 会导致每次文档更新都产生一个无法 diff 的巨大二进制差异,别人根本看不出你改了哪几页。正确的做法是把 CHM 当作构建产物,把源文件目录——也就是 HTML、.hhc、.hhk、.hhp 这一整套——纳入版本管理。
具体操作上,建议把源目录结构完整提交到仓库,CHM 编译输出在本地生成,不进版本库。这样团队成员可以通过 diff 查看内容变化,只有需要发布版本时才执行编译,提交 CHM 到发布目录。CHM Editor 恰好支持打开项目文件(.hhp),你可以直接在源目录上工作,编辑完成后编译输出到指定目录,与 Git 工作流完美配合。
个人体会是,用了这个工作流之后,文档维护的透明度和可追溯性提高了不少。以前收到一个修改后的 CHM,只能整个替换,出了差错也说不清是谁改的、改了哪里。现在源码管理在 Git 里,每次变更清清楚楚,CHM Editor 负责把源码变成成品。
6. 横向对比:为什么我最后还是留了一款 CHM Editor 的绿色版
6.1 同赛道工具速览
市面能处理 CHM 编辑的工具并不多,我分别试过几款主流产品,基本结论如下表:
| 工具 | 安装方式 | 编译能力 | 可视化程度 | 目录树编辑 | 维护状态 |
|---|---|---|---|---|---|
| HTML Help Workshop | 安装版 | 官方标准 | 差,纯手工 | 支持,但简陋 | 停止更新多年 |
| CHM Editor | 绿色版/安装版 | 完整 | 高,所见即所得 | 直接拖拽操作 | 更新较活跃 |
| HelpNDoc | 安装版 | 完整 | 高 | 支持 | 持续更新,但免费版受限 |
| FastCHM | 安装版 | 部分 | 中 | 支持 | 更新缓慢 |
| 7-Zip + 手工编译 | 绿色 | 依赖外部编译器 | 无 | 手工改文件 | 无 |
6.2 我的选型结论
用了一圈之后,我把 CHM Editor 绿色版定为主力工具,理由有三个:一是便携性,压缩包放在 U 盘里就能在任意 Windows 电脑上处理文档;二是对“.hhc、.hhk、.hhp 三件套”的封装做得完整,不用我维护三个格式敏感的配置文件;三是编辑到编译的闭环短,适合高频迭代的文档维护场景。
它当然不是万能的。如果你需要从零构建一套完整的帮助系统,HelpNDoc 这类专业帮助文档工具更合适,因为它从设计之初就围绕帮助文档的撰写、管理和多格式发布来构建。如果你的工作只是偶尔解包一个 CHM 看内部资源,那 7-Zip 加一个文本编辑器就够了,完全不需要引入编译工具。可一旦你进入了“打开已有的 CHM 并把它改对”的场景,CHM Editor 的绿色版就是我目前能找到的最顺手的组合。
最后分享一个小技巧:绿色版把配置文件和程序放在一起,维护多台机器时,把配置文件夹一起复制过去,窗口布局、语言偏好、默认输出目录都会跟着走,省掉每台机器重新设置的麻烦。我后来建了一个“CHM 维护工具箱”目录,里面放了 CHM Editor 压缩包、VC++ 运行库安装包、7-Zip 便携版和一个简单的使用说明,处理文档时一套带走,基本没有遇到过环境上的意外。
本文还有配套的精品资源,点击获取