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

微軟在多年前推出了一個 [HTML Help Workshop](https://web.archive.org/web/20090101220548/http://www.microsoft.com/downloads/details.aspx?FamilyID=00535334-c8a6-452f-9aa0-d597d16580cc&displaylang=en) 工具，可以產生 \*.chm 格式的離線網頁，你可以很輕易的透過此工具編輯一個離線的網站，比較常用於桌面軟體的說明檔格式。不過這個軟體應該已經 6 ~ 7 年沒再更新了，對於 Unicode 的支援也不好，若沒有正確設定很容易就會導致中文顯示異常的問題。

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

![HTML Help 要遇到中文檔名就會出現亂碼，而且檔案都打不開](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/4213a1a66f23f14d627f-image_3.png "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](http://msdn.microsoft.com/zh-tw/library/system.text.encoding.default.aspx) 屬性取得即可。

**重點整理**

1.  **HTML Help 專案定義檔 ( \*.hhp )** 與 **HTML Help 內容定義檔 ( \*.hhc )** 檔案必須以 ANSI 編碼
2.  **HTML Help 專案定義檔 ( \*.hhp )** 必須正確宣告 Language 與加上 Default Font 選項指定字型
3.  善用 [HTML Help Workshop](https://web.archive.org/web/20090101220548/http://www.microsoft.com/downloads/details.aspx?FamilyID=00535334-c8a6-452f-9aa0-d597d16580cc&displaylang=en) 工具來協助你釐清每個選項可設定的值(Value)與正確的使用方式

**相關連結**

-   [HTML Help Workshop and Documentation](https://web.archive.org/web/20090101220548/http://www.microsoft.com/downloads/details.aspx?FamilyID=00535334-c8a6-452f-9aa0-d597d16580cc&displaylang=en)
