DITA-OT1.5.3 HTML Help生成で文字化け

●問題の概要
DITA-OT1.5.3で日本語のHTML Helpを生成すると、

 ― &#xFFE3
 〜 &#x301C
 ‖ &#x2016
 − &#x2212
 ¢ &#x00A2
 £ &#x00A3
 ¬ &#x00AC

などの文字が化けます。DITA-OT1.5.2でも同様です。
文字化けしないように修正するには、文字コード変換を担っているJavaモジュールのdost.jarを修正しなければいけません。

Javaによる文字コード処理の問題
DITA-OT1.5.1以前は、日本語のHTML Helpを生成することができませんでした。DITA-OT1.5.2から、HTML Helpを生成するときに、ロケールの指定に応じて文字コードの変換が行われるようになり、日本語HTML Helpの生成が可能になりました。文字コードの変換は、Javaのプログラムによって行われています。

Javaのプログラムで上記のような文字化けが発生するのはよくあることで、いろいろなWebサイトで理由や対策方法が説明されています。今回の問題解決に役立ったページのリンクを下記に示します。

文字コードについて(シフトJISの問題)
Shift_JISのエイリアスの変更について
日本語のUnicodeベンダ依存文字表

●修正方法
【準備】

  1. dost.jarを修正するために、まず、DITA-OTのソースコードをダウンロード、解凍します。
  2. Javaソースコードコンパイルするために、JDKをインストールします。

【修正内容】
対象ソースファイル: DITA-OT1.5.3_M7_src\src\org\dita\dost\util\ConvertLang.java
修正箇所:
200行、201行を下記のとおり変更する。
<修正前>

    "    <cp format=\"html\" encoding=\"943\" charset=\"Shift_JIS\"/>" +
    "    <cp format=\"windows\" encoding=\"943\" charset=\"Shift_JIS\"/>" +

<修正後>

    "    <cp format=\"html\" encoding=\"943\" charset=\"Windows-31J\"/>" +
    "    <cp format=\"windows\" encoding=\"943\" charset=\"Windows-31J\"/>" +

【dost.jarのビルド】

ant -f buildPackage.xml package-java

●検証用のDITAファイル
にっくさんのブログ『ハードなソフトの話』「Perl 5.8.x で shiftjis 、CP932、MacJapanese の違い」を参考に、文字化けを検証するためのDITAファイルを作りましたので、公開します。上記の修正を加える前と加えた後の、HTML Helpの出力結果もアップしておきます。

→文字化け検証用DITAファイル charcheck.zip 直
→修正前HTML Helpサンプル  charcheck-pre.zip 直
→修正後HTML Helpサンプル charcheck-after.zip 直

<補足>
インターネットからダウンロードしたHTML Help(*.chm)はブロックされます。HTML Helpを参照する前に、下記の手順でブロックを解除してください。

  1. CHMファイルを右クリックして、表示されたポップアップメニューの[プロパティ]を選択する。
  2. 表示されたダイアログボックスの[ブロックの解除]ボタンをクリックする。