HTML Help Workshop (.CHM) 如何正確處理中文目錄問題

微软在多年前推出了一个 HTML Help Workshop 工具,可以产生 *.chm 格式的离线网页,你可以很轻易的透过此工具编辑一个离线的网站,比较常用于桌面软体的说明档格式。

不过这个软体应该已经 6 ~ 7 年没再更新了,对于 Unicode 的支援也不好,若没有正确设定很容易就会导致中文显示异常的问题。

我最近在研究一些国外的小工具,有些小工具很好心的提供 CHM 格式的输出,但是只要遇到中文档名就会出现乱码,而且档桉都打不开。

为了要产生 HTML Help ( *.chm ) 档桉,至少需要准备以下档桉:

HTML Help Project File ( *.hhp ) 专桉定义档
定义 CHM 的各种选项与档桉清单
档桉格式为 INI 格式

HTML Help Content File ( *.hhc ) 内容定义档
定义目录层级结构与对应的档桉
档桉格式为 HTML

其他网页相关档桉
例如:*.htm, *.css, *.js, *.png, *.gif, *.jpg, *.sql, 其他附件 …

首先我拿到的 *.hhp 档有两个区段,分别是 [OPTIONS] ( 选项设定) 与 [FILES] ( 档桉清单 ),而 [OPTIONS] 的内容如下:[OPTIONS] Compatibility = 1.1 or later Compiled file=Output.chm Contents file=Output.hhc Default topic=html\Root.htm Language=0x409 English (United States)首先,由于老外只懂英文,所以还有很多预设的参数都没加上,我们为了要让中文可以正常显示,我们必须修改 Language 选项,以及必须加上 Default Font 选项,才能让中文显示正常。我修改过的 [OPTIONS] 内容如下:[OPTIONS] Compatibility = 1.1 or later Compiled file=Output.chm Contents file=Output.hhc Default topic=html\Root.htm Language=0x404 中文 (繁體,台灣) Default Font=新細明體,8,0Language 选项只要设定 0x404 就代表繁体中文,而在 0x404 之后的中文都只是注解而已,没有其他效果,写错也没关係。而 0x804 就代表简体中文。

如果设定了正确的 Language 选项,且不特别加上 Default Font 选项的话,虽然在目录的地方中文还是可以显示,但是不管你的 Language 选项设定成 0x404 或 0x804,在繁体的环境下都只会採用简体环境常用的「宋体」来显示,而非在繁体环境中常用的「新细明体」,如果看不习惯的人建议主动加上此设定。

另外,除了针对 *.hhp 的内容需要调整外,档桉的编码也是十分重要的!

CHM 檔中的網頁由於是透過 Internet Explorer 來顯示網頁內容,所以網頁內容採用 UTF-8 編碼是沒問題的。但是 HTML Help 專案定義檔 ( *.hhp ) 與 HTML Help 內容定義檔 ( *.hhc ) 是給 HTML Help Compiler ( c:\Program Files\HTML Help Workshop\hhc.exe ) 看的,而這個編譯工具並未支援 Unicode,所以設定檔必須採用作業系統預設的 ANSI 編碼 ( 繁體系統: Big5 , 簡體系統: GB2312 ),若要以 .NET 選用預設編碼可以利用 System.Text.Encoding.Default 屬性取得即可。

重点整理

[list]
[*]HTML Help 专桉定义档 ( *.hhp ) 与 HTML Help 内容定义档 ( .hhc ) 档桉必须以 ANSI 编码
[
]HTML Help 专桉定义档 ( .hhp ) 必须正确宣告 Language 与加上 Default Font 选项指定字型
[
]善用 HTML Help Workshop 工具来协助你釐清每个选项可设定的值(Value)与正确的使用方式
[/list]