The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

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

微軟在多年前推出了一個 HTML Help Workshop 工具,可以產生 *.chm 格式的離線網頁,你可以很輕易的透過此工具編輯一個離線的網站,比較常用於桌面軟體的說明檔格式。不過這個軟體應該已經 6 ~ 7 年沒再更新了,對於 Unicode 的支援也不好,若沒有正確設定很容易就會導致中文顯示異常的問題。

我最近在研究一些國外的小工具,有些小工具很好心的提供 CHM 格式的輸出,但是只要遇到中文檔名就會出現亂碼,而且檔案都打不開。

HTML Help 要遇到中文檔名就會出現亂碼,而且檔案都打不開

為了要產生 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,0

Language 選項只要設定 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 屬性取得即可。

重點整理

  1. HTML Help 專案定義檔 ( *.hhp ) HTML Help 內容定義檔 ( *.hhc ) 檔案必須以 ANSI 編碼
  2. HTML Help 專案定義檔 ( *.hhp ) 必須正確宣告 Language 與加上 Default Font 選項指定字型
  3. 善用 HTML Help Workshop 工具來協助你釐清每個選項可設定的值(Value)與正確的使用方式

相關連結